#include<bits/stdc++.h>
using namespace std;
char a[12][12],b[12][12],c[12][12],d[12][12],n;
bool w1(){
for(int i = 0;i < n;i++){
for(int j = 0;j < n;j++){
c[j][n - i + 1] = d[i][j];
}
}
for(int i = 0;i < n;i++){
for(int j = 0;j < n;j++){
if(c[i][j] != b[i][j])return 0;
}
}
return 1;
}
bool w2(){
for(int i = 0;i < n;i++){
for(int j = 0;j < n;j++){
c[n - i + 1][n - j + 1] = d[i][j];
}
}
for(int i = 0;i < n;i++){
for(int j = 0;j < n;j++){
if(c[i][j] != b[i][j])return 0;
}
}
return 1;
}
bool w3(){
for(int i = 0;i < n;i++){
for(int j = 0;j < n;j++){
c[n - j + 1][i] = d[i][j];
}
}
for(int i = 0;i < n;i++){
for(int j = 0;j < n;j++){
if(c[i][j] != b[i][j])return 0;
}
}
return 1;
}
bool w4(){
for(int i = 0;i < n;i++){
for(int j = 0;j < n;j++){
d[i][n - j + 1] = a[i][j];
}
}
for(int i = 0;i < n;i++){
for(int j = 0;j < n;j++){
if(d[i][j] != b[i][j])return 0;
}
}
return 1;
}
//这些是根据题解推出的规律,wtcl
bool w5(){
w4();
if(w1() || w2() || w3())return 1;
return 0;
}
//先翻转一遍,然后求返回值,是的话就返回1
//为了w5我还改了前面转换的变量,翻转之后就能直接用翻转之后的变量来进行各种操作
bool w6(){
for(int i = 0;i < n;i++){
for(int j = 0;j < n;j++){
if(a[i][j] != b[i][j])return 0;
}
}
return 1;
}
//这里是直接比较
void w(){
if(w1())cout << 1;
else if(w2())cout << 2;
else if(w3())cout << 3;
else if(w4())cout << 4;
else if(w5())cout << 5;
else if(w6())cout << 6;
else cout << 7;
}
//懒得写在主程序了
int main(){
cin >> n;
for(int i = 0;i < n;i++){
for(int j = 0;j < n;j++){
cin >> a[i][j];
d[i][j] = a[i][j];
}
}
for(int i = 0;i < n;i++){
for(int j = 0;j < n;j++)cin >> b[i][j];
}
w();
return 0;
}
只对了1个点,实在整不出来啊啊啊啊