#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void rotate90(vector<string>& matrix) {
int n = matrix.size();
vector<string> rotated(n, string(n, ' '));
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
rotated[j][n - 1 - i] = matrix[i][j];
}
}
matrix = rotated;
}
void rotate180(vector<string>& matrix) {
rotate90(matrix);
rotate90(matrix);
}
void rotate270(vector<string>& matrix) {
rotate180(matrix);
rotate90(matrix);
}
void reflect(vector<string>& matrix) {
int n = matrix.size();
for (int i = 0; i < n; ++i) {
reverse(matrix[i].begin(), matrix[i].end());
}
}
bool areEqual(const vector<string>& matrix1, const vector<string>& matrix2) {
return matrix1 == matrix2;
}
int main() {
int n;
cin >> n;
vector<string> original(n), target(n);
for (int i = 0; i < n; ++i) {
cin >> original[i];
}
for (int i = 0; i < n; ++i) {
cin >> target[i];
}
if (areEqual(original, target)) {
cout << 6 << endl;
} else {
rotate90(original);
if (areEqual(original, target)) {
cout << 1 << endl;
} else {
rotate90(original);
if (areEqual(original, target)) {
cout << 2 << endl;
} else {
rotate90(original);
if (areEqual(original, target)) {
cout << 3 << endl;
} else {
rotate90(original);
reflect(original);
if (areEqual(original, target)) {
cout << 4 << endl;
} else {
rotate90(original);
if (areEqual(original, target)) {
cout << 5 << endl;
} else {
rotate180(original);
if (areEqual(original, target)) {
cout << 5 << endl;
} else {
rotate270(original);
if (areEqual(original, target)) {
cout << 5 << endl;
} else {
cout << 7 << endl;
}
}
}
}
}
}
}
}
return 0;
}