#include<iostream>
#include<algorithm>
using namespace std;
string s1[1000010],s2[1000010];
bool pd(string s1[]){//判断是否相等
for(int i=0;i<s1[0].length();++i)
if(s1[i]!=s2[i]) return 0;
return 1;
}
bool check1(){//旋转90度
int l=s1[0].length();
string s3[l];
for(int i=0,v=l-1;i<l;i++,v--)for(int j=0,u=0;j<l;j++,u++)s3[u][v]=s1[i][j];
return pd(s3);
}
bool check2(){//旋转180度
int l=s1[0].length();
string s3[l];
for(int i=0,u=l-1;i<l;i++,u--)for(int j=0,v=l-1;j<l;j++,v--)s3[u][v]=s1[i][j];
return pd(s3);
}
bool check3(){//旋转270度
int l=s1[0].length();
string s3[l];
for(int i=0,u=0;i<l;i++,u++)for(int j=0,v=l-1;j<l;j++,v--)s3[u][v]=s1[i][j];
return pd(s3);
}
bool check4(){//翻转
for(int i=0;i<s1[0].length();i++)
reverse(s1[i].begin(),s1[i].end());
return pd(s1);
}
bool check5(){//翻转且执行前三项
for(int i=0;i<s1[0].length();i++)
reverse(s1[i].begin(),s1[i].end());
return check1()||check2()||check3();
}
bool check6(){//直接判断
return pd(s1);
}
int main()
{
int a;scanf("%d",&a);
for(int i=0;i<a;i++)cin>>s1[i];
for(int i=0;i<a;i++)cin>>s2[i];
if(check1())printf("1");
else if(check2())printf("2");
else if(check3())printf("3");
else if(check4())printf("4");
else if(check5())printf("5");
else if(check6())printf("6");
else printf("7");
}
(这题好像有点不科学)