fork download
  1. #include <cstdio>
  2. #include <algorithm>
  3. using namespace std;
  4.  
  5. const int MOD = 55566677;
  6.  
  7. int main(){
  8. int P[60]={1};
  9. for(int i=1;i<60;i++) P[i]=P[i-1]*1ll*i%MOD;
  10. int n,m,x[25],y[25];
  11. while(scanf("%d%d",&n,&m)==2){
  12. for(int i=0;i<m;i++) scanf("%d%d",x+i,y+i);
  13. for(int i=0;i<m;i++) for(int j=i+1;j<m;j++){
  14. if(x[i]==x[j] && y[i]==y[j]){
  15. swap(x[j],x[m-1]);
  16. swap(y[j],y[--m]);
  17. }
  18. }
  19. int mask=(1<<m)-1,ans=P[n],s=0;
  20. int pos[60]={},use[60]={},cnt=0,err=0;
  21. for(int c=1;c<=mask;c++){
  22. int i=__builtin_ctz(c);
  23. s^=1<<i;
  24. if(1<<i&s){
  25. cnt++;
  26. if(pos[x[i]]++==1) err++;
  27. if(use[y[i]]++==1) err++;
  28. }else{
  29. cnt--;
  30. if(--pos[x[i]]==1) err--;
  31. if(--use[y[i]]==1) err--;
  32. }
  33. if(err) continue;
  34. if(cnt&1) ans-=P[n-cnt]; else ans+=P[n-cnt];
  35. if(ans<0) ans+=MOD;
  36. if(ans>=MOD) ans-=MOD;
  37. }
  38. printf("%d\n",ans);
  39. }
  40. }
  41.  
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty