#include<stdio.h>
struct matrix{
char arr[10][10];
};
int judge(struct matrix ma0, struct matrix ma1, int n);
void revolve(struct matrix ma0, struct matrix* ma1, int n);
void shuiping(struct matrix ma0, struct matrix* ma1, int n);
int main()
{
int n;
scanf_s("%d", &n);
getchar();
struct matrix ma0, ma1, ma2, ma3, ma4, ma5;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
scanf_s("%c", &ma0.arr[i][j]);
}
getchar();
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
scanf_s("%c", &ma1.arr[i][j]);
}
getchar();
}
revolve(ma0, &ma2, n);
if (judge(ma1, ma2, n))
{
printf("1");
return 0;
}
revolve(ma2, &ma3, n);
if (judge(ma1, ma3, n))
{
printf("2");
return 0;
}
revolve(ma3, &ma4, n);
if (judge(ma1, ma4, n))
{
printf("3");
return 0;
}
shuiping(ma0, &ma2, n);
if (judge(ma1, ma2, n))
{
printf("4");
return 0;
}
revolve(ma2, &ma3, n);
revolve(ma3, &ma4, n);
revolve(ma4, &ma5, n);
revolve(ma2, &ma3, n);
revolve(ma3, &ma4, n);
revolve(ma2, &ma3, n);
if (judge(ma1, ma3, n) || judge(ma1, ma4, n) || judge(ma1, ma5, n))
{
printf("5");
return 0;
}
if (judge(ma1, ma0, n))
{
printf("6");
return 0;
}
printf("7");
return 0;
}
int judge(struct matrix ma0, struct matrix ma1, int n)
{
int b = 1;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
if (ma0.arr[i][j] != ma1.arr[i][j])
{
b = 0;
return b;
}
}
}
return b;
}
void revolve(struct matrix ma0, struct matrix* ma1, int n)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
ma1->arr[j][n - i - 1] = ma0.arr[i][j];
}
}
}
void shuiping(struct matrix ma0, struct matrix* ma1, int n)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
ma1->arr[i][n - j - 1] = ma0.arr[i][j];
}
}
}