#include #include int f[52][52][4]; int c[52][2]; int next[52]; long n; void swap(int *a,int *b){ int c; c=*a; *a=*b; *b=c; } int check(char s[52][4],int i,int j,int k){ if(s[i][(k/2)*2]==s[j][(k%2)*2] || (s[i][1-k/2]==s[j][1-k%2] && s[i][2-k/2]==s[j][2-k%2])) return 0; return 1; } int search(int k){ if(k==n) return 1; int j,f0,f1,a,id,jj,i=next[k]; int cc[52][2]; if(i==0){ memset(c,1,sizeof(c)); } memcpy(cc,c,sizeof(cc)); f0=c[i][0]; f1=c[i][1]; if(f0){ c[i][0]=1; c[i][1]=0; a=2; memcpy(cc,c,sizeof(cc)); for(j=k+1;j52){ printf("Impossible\n"); return 0; }else{ for(i=0;i