import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
char[][] startArray = new char[n][n];
char[][] endArray = new char[n][n];
for (int i = 0; i < n; i++) {
String s = scanner.next();
startArray[i] = s.toCharArray();
}
for (int i = 0; i < n; i++) {
String s = scanner.next();
endArray[i] = s.toCharArray();
}
System.out.println(getType(startArray, endArray, n));
}
public static int getType(char[][] startArray, char[][] endArray,int n){
char[][] start = Arrays.copyOf(startArray, n);
if (revolve90(startArray, endArray,n)) {
return 1;
}
if (revolve180(startArray, endArray,n)){
return 2;
}
if (revolve270(startArray, endArray,n)){
return 3;
}
if (revolvePerpendicular(startArray, endArray,n)) {
return 4;
}
char[][] tempArray=startArray;
horizontalReversal(tempArray,n);
if (revolve90(tempArray, endArray,n)||revolve180(tempArray, endArray,n)||revolve270(tempArray, endArray,n)){
return 5;
}
if (isSame(start,endArray,n)){
return 6;
}
return 7;
}
public static void horizontalReversal(char[][] tempArray,int n){
int i=0;
while (i<n/2){
char[] temp=tempArray[i];
tempArray[i]=tempArray[n-1-i];
tempArray[n-1-i]=temp;
i++;
}
}
public static boolean revolvePerpendicular(char[][] startArray, char[][] endArray,int n){
char[][] revolve = Arrays.copyOf(startArray, n);
for (int i = 0; i < n; i++) {
int j=0;
while (j<revolve[i].length/2){
char temp=revolve[i][j];
revolve[i][j]=revolve[i][n-1-j];
revolve[i][n-1-j]=temp;
j++;
}
}
return isSame(revolve,endArray,n);
}
public static boolean revolve270(char[][] startArray, char[][] endArray,int n){
char[][] temp=new char[n][n];
int x=0,y=0;
for (int j = n-1; j >=0 ; j--) {
for (int i = 0; i < n ; i++) {
temp[x][y]=startArray[i][j];
y++;
if (y>=n){
y=0;
x++;
}
}
}
return isSame(temp,endArray,n);
}
public static boolean revolve180(char[][] startArray, char[][] endArray,int n){
char[][] temp=new char[n][n];
int x=0,y=0;
for (int i = n-1; i >= 0; i--) {
for (int j = n-1; j >= 0; j--) {
temp[x][y]=startArray[i][j];
y++;
if (y>=n){
y=0;
x++;
}
}
}
return isSame(temp,endArray,n);
}
public static boolean revolve90(char[][] startArray, char[][] endArray,int n){
char[][] temp=new char[n][n];
int x=0,y=0;
for (int i = 0; i < n ; i++) {
for (int j = n-1; j >=0 ; j--) {
temp[x][y]=startArray[j][i];
y++;
if (y>=n){
y=0;
x++;
}
}
}
return isSame(temp,endArray,n);
}
public static void print(char[][] temp){
for (int i = 0; i < temp.length; i++) {
for (int j = 0; j < temp[i].length; j++) {
System.out.print(temp[i][j]+" ");
}
System.out.println();
}
}
public static boolean isSame(char[][] tempArray, char[][] endArray,int n) {
boolean flag = true;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (tempArray[i][j]!= endArray[i][j]){
flag=false;
}
}
}
return flag;
}
}