#include #include using namespace std; typedef vector V; typedef vector M; #define N 50 #define MOD 7 int n,mod,g[N][N]; #define mul(a,b) ((((a)%MOD)*((b)%MOD))%MOD) #define sub(a,b) ((((a)%MOD)-((b)%MOD)+MOD)%MOD) int msolve(int a) { int c=a,d=MOD,e=1,f=0,q,r; int tmp; while (r=c%d) { q=c/d; c=d; d=r; tmp=f; f=e-q*f; e=tmp; } q=(f/d)%(MOD/d); if (q<0) q+=MOD/d; return q; } int gauss(M& a, V& b, V& x) { int m=a.size(),n=a[0].size(),k,r; vector q; for (k=0;k0) goto FOUND; break; FOUND: if (j!=k) for (int t=0;t0) return -1; for (int k=r-1;k>=0;--k) { int s=b[k]; for (int j=k+1;j=0;--k) swap(x[k], x[q[k]]); return n-r; } int enc(int x, int y) { return y*n+x; } int main() { while(scanf("%d",&n),n) { if (n<3||n>15) { fprintf(stderr,"invalid input\n"); exit(0); } M a(n*n,V(n*n)); V b(n*n),ans; for (int y=0;y