/*
ID: aznfy1
PROG: transform
LANG: C++
*/
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#include<string.h>
#define clr(a,b); memset(a,b,sizeof(a));
using namespace std;
char newgraph[20][20];
char oldgraph[20][20];
char buf[20][20];
char want[20][20];
int n;
int compare()
{
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(strcmp(want[i],newgraph[i])!=0)
return 0;
return 1;
}
void change1()
{
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{
newgraph[j][n-i-1]=buf[i][j];
}
}
void change2()
{
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{
newgraph[n-i-1][n-j-1]=buf[i][j];
}
}
void change3()
{
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{
newgraph[n-j-1][i]=buf[i][j];
}
}
void Reflection()
{
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{
newgraph[i][n-j-1]=buf[i][j];
}
}
int main()
{
freopen("transform.in","r",stdin);
freopen("transform.out","w",stdout);
while(scanf("%d",&n)!=EOF)
{
clr(oldgraph,0);
clr(newgraph,0);
for(int i=0;i<n;i++)
cin>>oldgraph[i];
for(int i=0;i<n;i++)
cin>>want[i];
for(int i=0;i<n;i++)
strcpy(buf[i],oldgraph[i]);
change1();
if(compare())
{
cout<<1<<endl;
continue;
}
change2();
if(compare())
{
cout<<2<<endl;
continue;
}
change3();
if(compare())
{
cout<<3<<endl;
continue;
}
Reflection();
if(compare())
{
cout<<4<<endl;
continue;
}
Reflection();
for(int i=0;i<n;i++)
strcpy(buf[i],newgraph[i]);
change1();
if(compare())
{
cout<<5<<endl;
continue;
}
for(int i=0;i<n;i++)
strcpy(buf[i],oldgraph[i]);
Reflection();
for(int i=0;i<n;i++)
strcpy(buf[i],newgraph[i]);
change2();
if(compare())
{
cout<<5<<endl;
continue;
}
for(int i=0;i<n;i++)
strcpy(buf[i],oldgraph[i]);
Reflection();
for(int i=0;i<n;i++)
strcpy(buf[i],newgraph[i]);
change3();
if(compare())
{
cout<<5<<endl;
continue;
}
for(int i=0;i<n;i++)
strcpy(buf[i],oldgraph[i]);
for(int i=0;i<n;i++)
strcpy(newgraph[i],oldgraph[i]);
if(compare())
{
cout<<6<<endl;
continue;
}
cout<<7<<endl;
}
return 0;
}