#include <iostream>
using namespace std;
bool work1(char a[][12], char b[][12], int n) {
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++) {
if (a[i][j] != b[j][n - i + 1]) return false;
}
return true;
}
bool work2(char a[][12], char b[][12], int n) {
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if (a[i][j] != b[n - i + 1][j]) return false;
}
}
return true;
}
bool work3(char a[][12], char b[][12], int n) {
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if (a[i][j] != b[j][i]) return false;
}
}
return true;
}
bool work4(char a[][12], char b[][12], int n) {
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if (a[i][j] != b[i][n - j + 1]) return false;
}
}
return true;
}
bool work5(char a[][12], char b[][12], int n) {
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n / 2; j++) {
swap(a[i][n - j + 1], a[i][j]);
}
}
if (work1(a, b, n)) return true;
else if (work2(a, b, n)) return true;
else if (work3(a, b, n)) return true;
return false;
}
bool work6(char a[][12], char b[][12], int n) {
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if (a[i][j] != b[i][j]) return false;
}
}
return true;
}
int main() {
int n;
cin >> n;
char a1[12][12], a2[12][12];
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
cin >> a1[i][j];
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
cin >> a2[i][j];
if (work1(a1, a2, n)) {
cout << 1;
return 0;
}
if (work2(a1, a2, n)) {
cout << 2;
return 0;
}
if (work3(a1, a2, n)) {
cout << 3;
return 0;
}
if (work4(a1, a2, n)) {
cout << 4;
return 0;
}
if (work5(a1, a2, n)) {
cout << 5;
return 0;
}
if (work6(a1, a2, n)) {
cout << 6;
return 0;
}
cout << 7;
return 0;
}