/*
情况1(右转90度) 原图中(i,j)被旋转到了(j,n-i+1) 这里的+1很重要
情况2(右转180度) 原图中(i,j)被旋转到了(n-i+1,n-j+1)
情况3(右转270度) (i,j)-->(n-j+1,i)
情况4(对称) (i,j)-->(i,n-j+1)
情况5(组合) 将情况4做完后传给情况1,2,3即可
情况6(不动) ……
情况7(无解) 以上情况均不符合
*/
#include<stdio.h>
#include<string.h>
int main()
{
int n,jieguo=0;
char a[10][10],b[10],c[10][10];
char d[10][10],e[10][10];
//a数组输入开始的,b数组辅助输入的,c数组是目标图形,e数组用在第五种情况
scanf("%d",&n);
scanf("%s",b);
int t=strlen(b);
strcpy(&a[1][1],b);
for(int i=2;i<=n;i++){
scanf("%s",b);
strcpy(&a[i][1],b);
}
scanf("%s",b);
t=strlen(b);
strcpy(&c[1][1],b);
for(int i=2;i<=n;i++){
scanf("%s",b);
strcpy(&c[i][1],b);
}
while(1){
//情况1(右转90度) 原图中(i,j)被旋转到了(j,n-i+1)
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
d[j][n-i+1]=a[i][j];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(d[i][j]==c[i][j])
jieguo=1;
else{
jieguo=7;
break;
}
}
}
if(jieguo==1)
break;
//情况2(右转180度) 原图中(i,j)被旋转到了(n-i+1,n-j+1)
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
d[n-i+1][n-j+1]=a[i][j];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(d[i][j]==c[i][j])
jieguo=2;
else{
jieguo=7;
break;
}
}
}
if(jieguo==2)
break;
//情况3(右转270度) (i,j)-->(n-j+1,i)
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
d[n-j+1][i]=a[i][j];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(d[i][j]==c[i][j])
jieguo=3;
else{
jieguo=7;
break;
}
}
}
if(jieguo==3)
break;
//情况4(对称) (i,j)-->(i,n-j+1)
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
d[i][n-j+1]=a[i][j];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(d[i][j]==c[i][j])
jieguo=4;
else{
jieguo=7;
break;
}
}
}
if(jieguo==4)
break;
//情况5(组合) 将情况4做完后传给情况1,2,3即可
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
d[i][n-j+1]=a[i][j];
}
}
while(1){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
e[j][n-i+1]=d[i][j];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(e[i][j]==c[i][j])
jieguo=5;
else{
jieguo=7;
break;
}
}
}
if(jieguo==5)
break;
//情况2
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
e[n-i+1][n-j+1]=d[i][j];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(e[i][j]==c[i][j])
jieguo=5;
else{
jieguo=7;
break;
}
}
}
if(jieguo==5)
break;
//情况3
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
e[n-j+1][i]=d[i][j];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(e[i][j]==c[i][j])
jieguo=5;
else{
jieguo=7;
break;
}
}
}
if(jieguo==5)
break;
break;
}
if(jieguo==5)
break;
//情况6不动
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(a[i][j]==c[i][j]){
jieguo=6;
}
else{
jieguo=7;
break;
}
}
}
if(jieguo==6)
break;
break;
}
printf("%d",jieguo);
return 0;
}