#include <bits/stdc++.h>
#define MAX 10
using namespace std;

//上下翻转 
void Topfilp(int (&data)[MAX][MAX],int size){
	for(int i = 0; i < size / 2; i++){	//翻转次数控制 
		for(int j = 1; j <= size; j++){	//行数控制 
			swap(data[1+i][j],data[size-i][j]);
		}
	}
}

//左右翻转 
void Leftfilp(int (&data)[MAX][MAX],int size){
	for(int i = 0; i < size /2 ; i++){
		for(int j = 1; j <= size; j++){
			swap(data[j][1+i],data[j][size-i]);
		}
	}
}

//对称翻转 
void DuiCheng(int (&data)[MAX][MAX],int size){
	for(int i = 1; i <= size; i++){
		for(int j = 1; j < i; j++){
			swap(data[i][j],data[j][i]);
		}
	}
}

bool Check(int data[MAX][MAX],int a[MAX][MAX],int size){
	for(int i = 1; i <= size; i++){
		for(int j = 1; j <= size; j++){
			if(data[i][j] != a[i][j])
				return false;
		}
	}
	return true;
}

int main(){
	int n,tmp;
	cin>>n;
	int data[MAX][MAX],a[MAX][MAX];
	for(int i = 1; i <= n; i++){
		for(int j = 1; j <= n; j++){
			cin>>data[i][j];
		}
	}
	for(int i = 1; i <= n; i++){
		for(int j = 1; j <= n; j++){
			cin>>a[i][j];
		}
	}
	
	if(Check(data,a,n)){
		cout<<"0";
		return 0;
	}
	
	
	Topfilp(data,n);
	DuiCheng(data,n);
	if(Check(data,a,n)){
		cout<<"90";	//顺时针90 
		return 0;
	}
	
		 
	Topfilp(data,n);
	DuiCheng(data,n);
	if(Check(data,a,n)){
		cout<<"180";
		return 0;
	}
	
	Topfilp(data,n);
	DuiCheng(data,n);
	if(Check(data,a,n)){
		cout<<"270";
		return 0;
	}	
    cout<<"-1";
    
	
	
}