/* ID: aznfy1 PROG: transform LANG: C++ */ #include<stdio.h> #include<string.h> #include<algorithm> #include<iostream> #include<string.h> #define clr(a,b); memset(a,b,sizeof(a)); using namespace std; char newgraph[20][20]; char oldgraph[20][20]; char buf[20][20]; char want[20][20]; int n; int compare() { for(int i=0;i<n;i++) for(int j=0;j<n;j++) if(strcmp(want[i],newgraph[i])!=0) return 0; return 1; } void change1() { for(int i=0;i<n;i++) for(int j=0;j<n;j++) { newgraph[j][n-i-1]=buf[i][j]; } } void change2() { for(int i=0;i<n;i++) for(int j=0;j<n;j++) { newgraph[n-i-1][n-j-1]=buf[i][j]; } } void change3() { for(int i=0;i<n;i++) for(int j=0;j<n;j++) { newgraph[n-j-1][i]=buf[i][j]; } } void Reflection() { for(int i=0;i<n;i++) for(int j=0;j<n;j++) { newgraph[i][n-j-1]=buf[i][j]; } } int main() { freopen("transform.in","r",stdin); freopen("transform.out","w",stdout); while(scanf("%d",&n)!=EOF) { clr(oldgraph,0); clr(newgraph,0); for(int i=0;i<n;i++) cin>>oldgraph[i]; for(int i=0;i<n;i++) cin>>want[i]; for(int i=0;i<n;i++) strcpy(buf[i],oldgraph[i]); change1(); if(compare()) { cout<<1<<endl; continue; } change2(); if(compare()) { cout<<2<<endl; continue; } change3(); if(compare()) { cout<<3<<endl; continue; } Reflection(); if(compare()) { cout<<4<<endl; continue; } Reflection(); for(int i=0;i<n;i++) strcpy(buf[i],newgraph[i]); change1(); if(compare()) { cout<<5<<endl; continue; } for(int i=0;i<n;i++) strcpy(buf[i],oldgraph[i]); Reflection(); for(int i=0;i<n;i++) strcpy(buf[i],newgraph[i]); change2(); if(compare()) { cout<<5<<endl; continue; } for(int i=0;i<n;i++) strcpy(buf[i],oldgraph[i]); Reflection(); for(int i=0;i<n;i++) strcpy(buf[i],newgraph[i]); change3(); if(compare()) { cout<<5<<endl; continue; } for(int i=0;i<n;i++) strcpy(buf[i],oldgraph[i]); for(int i=0;i<n;i++) strcpy(newgraph[i],oldgraph[i]); if(compare()) { cout<<6<<endl; continue; } cout<<7<<endl; } return 0; }