https://www.acwing.com/problem/content/1346/
#include<bits/stdc++.h>
using namespace std;
const int N=20;
string a[N],b[N],backup[N],c[N];
int n;
void init(){for(int i=0;i<n;i++) backup[i]=a[i];}
bool rotate(int m)//旋转
{
init();
for(int i=0;i<n;i++) c[i]=backup[i];
for(int k=1;k<=m;k++)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
c[j][n-i-1]=backup[i][j];
}
}
for(int i=0;i<n;i++) backup[i]=c[i];
}
for(int i=0;i<n;i++) if(c[i]!=b[i]) return false;
return true;
}
bool solve()//镜像
{
init();
for(int i=0;i<n;i++) c[i]=backup[i];
for(int i=0;i<n;i++)
for(int j=0;j<n/2;j++)
swap(c[i][j],c[i][n-j-1]);
for(int i=0;i<n;i++) if(c[i]!=b[i]) return false;
return true;
}
bool check(string a[],string b[])
{
for(int i=0;i<n;i++) if(a[i]!=b[i]) return false;
return true;
}
int main(void)
{
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
for(int i=0;i<n;i++) cin>>b[i];
bool flag=0;
if(rotate(1)) puts("1"),flag=1;
else if(rotate(2)) puts("2"),flag=1;
else if(rotate(3)) puts("3"),flag=1;
else if(solve()) puts("4"),flag=1;
else
{
solve();
for(int i=0;i<n;i++) a[i]=c[i];//赋值翻转后的值
if(rotate(1)||rotate(2)||rotate(3)) puts("5"),flag=1;
solve();//再次翻转
for(int i=0;i<n;i++) a[i]=c[i];//回复现场
}
if(!flag&&check(a,b)) puts("6"),flag=1;
if(!flag) puts("7");
return 0;
}