#include <iostream>
#include <fstream>
using namespace std;
struct PP{
char a;
bool v;
};
bool fun11(PP a[][100],int);
bool fun12(PP a[][100],int);
bool fun13(PP a[][100],int);
bool fun2(PP a[][100],int);
bool fun3(PP a[][100],int);
bool ifsame(PP a[][100],int,PP c[][100]);
PP ans[100][100];
int main()
{
ifstream cin ("transform.in");
ofstream cout ("transform.out");
PP a[100][100];
int n,i,j;
cin>>n;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
cin>>a[i][j].a;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
cin>>ans[i][j].a;
if(fun11(a,n)==1)
cout<<"1"<<endl;
else if(fun12(a,n)==1)
cout<<"2"<<endl;
else if(fun13(a,n)==1)
cout<<"3"<<endl;
else if(fun2(a,n)==1)
cout<<"4"<<endl;
else if(fun3(a,n)==1)
cout<<"5"<<endl;
else if(ifsame(a,n,ans)==1)
cout<<"6"<<endl;
else
cout<<"7"<<endl;
return 0;
}
bool fun11(PP a[][100],int num)
{
for(int i=0;i<num;i++)
for(int j=0;j<num;j++)
if(ans[j][num-1-i].a!=a[i][j].a) return 0;
return 1;
}
bool fun12(PP a[][100],int num)
{
for(int i=0;i<num;i++)
for(int j=0;j<num;j++)
if(ans[num-1-i][num-1-j].a!=a[i][j].a) return 0;
return 1;
}
bool fun13(PP a[][100],int num)
{
for(int i=0;i<num;i++)
for(int j=0;j<num;j++)
if(ans[num-1-i][i].a!=a[i][j].a) return 0;
return 1;
}
bool fun2(PP a[][100],int num)
{
for(int i=0;i<num;i++)
for(int j=0;j<num;j++)
if(ans[i][num-1-j].a!=a[i][j].a) return 0;
return 1;
}
bool ifsame(PP a[][100],int n,PP c[][100])
{
int i,j;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(c[i][j].a!=a[i][j].a)
return 0;
return 1;
}
bool fun3(PP a[][100],int num)
{
PP c[100][100];
for(int i=0;i<num;i++)
for(int j=0;j<num;j++)
c[i][j]=a[i][num-1-j];
for(int i=0;i<num;i++)
for(int j=0;j<num;j++)
if(fun12(c,num)==1 ||fun11(c,num)==1 ||fun13(c,num)==1)
return 1;
return 0;
}