Pagini recente » Cod sursa (job #755902) | Cod sursa (job #2166903) | Cod sursa (job #428443) | Borderou de evaluare (job #610460) | Cod sursa (job #466172)
Cod sursa(job #466172)
#include<stdio.h>
#include<stdlib.h>
#define MOD 1000000007
struct Corzi{
int cap,coada;
};
int n,k,nop[100003];
Corzi GRF[100003];
void OpenGate()
{
freopen("colorare3.in","r",stdin);
freopen("colorare3.out","w",stdout);
}
void ReadInput()
{
scanf("%d%d",&n,&k);
for(int i=0;i<n;++i)
scanf("%d%d",&GRF[i].cap,&GRF[i].coada);
}
int PaintIt()
{
int cnx,lst,i,j,posib=1;
for(i=0;i<n;++i)
{
cnx=0;
lst=GRF[i].cap;
while(GRF[i].cap==lst&&i<n)
{
nop[GRF[i].coada];
posib=((long long)posib*((k-(nop[GRF[i].coada]+nop[lst]))%MOD))%MOD;
++nop[GRF[i].coada];
++nop[lst];
++cnx;
++i;
}
if(cnx)
if(i<n)
--i;
}
return posib;
}
int CMP(const void *a,const void *b)
{
Corzi x,y;
x=*(Corzi *)a;
y=*(Corzi *)b;
if(x.cap<y.cap)
return -1;
if(x.cap>y.cap)
return 1;
if(x.cap==y.cap)
{
if(x.coada<y.coada)
return -1;
if(x.coada>y.coada)
return 1;
return 0;
}
}
int main()
{
OpenGate();
ReadInput();
--n;
qsort(GRF,n,sizeof(GRF[0]),CMP);
printf("%d",PaintIt());
return 0;
}