#include #include int n,m,maxd,cnt,sum; int FullSize[625],Size[625]; bool sti[65],in[625][65]; inline int getc(int r,int c)// | { return r*(2*n+1)+c+n+1; } inline int getr(int r,int c)//-- { return r*(2*n+1)+c+1; } inline int FindNext() { for(int i=1;i<=cnt;i++) if(Size[i]==FullSize[i]) return i; return 0; } void dfs(int d) { if(d>=maxd) return; int next=FindNext(); if(next==0) { maxd=d; return; } for(int i=1;i<=sum;i++) if(in[next][i]) { for(int j=1;j<=cnt;j++) if(in[j][i]) Size[j]--; dfs(d+1); for(int j=1;j<=cnt;j++) if(in[j][i]) Size[j]++; } } int main() { #ifdef local freopen("pro.in","r",stdin); // freopen("pro.out","w",stdout); #endif int kase; scanf("%d",&kase); while(kase-->0) { memset(in,0,sizeof(in)); memset(sti,1,sizeof(sti)); cnt=0; scanf("%d%d",&n,&m); int a,b,e,f; for(int i=0;i