#include<bits/stdc++.h>
using namespace std;
const int MAXN=10+10;
char a[MAXN][MAXN],b[MAXN][MAXN],c[MAXN][MAXN],d[MAXN][MAXN];
int n;
void fz1(){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
d[i][j]=c[i][j];
}
}
return;
}
void fz2(){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
c[i][j]=d[i][j];
}
}
return;
}
void fz3(){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
c[i][j]=a[i][j];
}
}
return;
}
bool IsEqual(){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if (c[i][j]!=b[i][j]) return false;
}
}
return true;
}
bool f1(){
for(int i=1,j=1;i<=n&&j<=n;i++,j++){
for(int i2=n,j2=1;i2>=1&&j2<=n;i2--,j2++){
c[i][j2]=a[i2][j];
}
}
return IsEqual();
}
bool f2(){fz3();f1();f1();return IsEqual();}
bool f3(){fz3();f1();f1();f1();return IsEqual();}
bool f4(){
fz3();
for(int i=1;i<=n;i++){
for(int j=1,j2=n;j<=n&&j2>=1;j++,j2--){
c[i][j]=a[i][j2];
}
}
return IsEqual();
}
bool f5(){
fz3();
f4();fz1();f1();
if (IsEqual()) return true;
fz2();fz1();f2();
if (IsEqual()) return true;
fz2();fz1();f3();
if (IsEqual()) return true;
return false;
}
bool f6(){fz3();return IsEqual();}
int solve(){
if (f1()) return 1;
else if (f2()) return 2;
else if (f3()) return 3;
else if (f4()) return 4;
else if (f5()) return 5;
else if (f6()) return 6;
else return 7;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>a[i][j];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>b[i][j];
}
}
cout<<solve();
return 0;
}