#include<bits/stdc++.h>

using namespace std;



#define fastio() ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL)
#define MOD 1000000007
#define MOD1 998244353
#define INF 1e18
#define nline "\n"
#define pb push_back
#define ppb pop_back
#define mp make_pair
#define ff first
#define ss second
#define PI 3.141592653589793238462
#define set_bits __builtin_popcountll
#define sz(x) ((int)(x).size())
#define all(x) (x).begin(), (x).end()

typedef long long ll;
typedef unsigned long long ull;
typedef long double lld;
// typedef tree<pair<int, int>, null_type, less<pair<int, int>>, rb_tree_tag, tree_order_statistics_node_update > pbds; // find_by_order, order_of_key

#ifndef ONLINE_JUDGE
#define debug(x) cerr << #x <<" "; _print(x); cerr << endl;
#else
#define debug(x)
#endif

void _print(ll t) {cerr << t;}
void _print(int t) {cerr << t;}
void _print(string t) {cerr << t;}
void _print(char t) {cerr << t;}
void _print(lld t) {cerr << t;}
void _print(double t) {cerr << t;}
void _print(ull t) {cerr << t;}

template <class T, class V> void _print(pair <T, V> p);
template <class T> void _print(vector <T> v);
template <class T> void _print(set <T> v);
template <class T, class V> void _print(map <T, V> v);
template <class T> void _print(multiset <T> v);
template <class T, class V> void _print(pair <T, V> p) {cerr << "{"; _print(p.ff); cerr << ","; _print(p.ss); cerr << "}";}
template <class T> void _print(vector <T> v) {cerr << "[ "; for (T i : v) {_print(i); cerr << " ";} cerr << "]";}
template <class T> void _print(set <T> v) {cerr << "[ "; for (T i : v) {_print(i); cerr << " ";} cerr << "]";}
template <class T> void _print(multiset <T> v) {cerr << "[ "; for (T i : v) {_print(i); cerr << " ";} cerr << "]";}
template <class T, class V> void _print(map <T, V> v) {cerr << "[ "; for (auto i : v) {_print(i); cerr << " ";} cerr << "]";}

void TestCase();

int main()
{
   fastio();
   
   #ifndef ONLINE_JUDGE
   freopen("input.txt", "r", stdin);
   freopen("output.txt", "w", stdout);
   freopen("Error.txt", "w", stderr);
   #endif
   
   int T=1;
   //cin>>T;
   while(T--)
   TestCase();

   return 0;
}

void rotatematrix(int n, vector<vector<char>> &a)
{
    vector<vector<char>> tmp(n,vector<char> (n));
    for(int i=0;i<n;++i)
    {
        for(int j=0;j<n;++j)
        {
            tmp[i][j]=a[n-1-j][i];
        }
    }
    a=tmp;
}

void TestCase()
{
    int n;
    cin>>n;
    vector<vector<char>> a(n,vector<char> (n));
    vector<vector<char>> b(n,vector<char> (n));
    vector<pair<int,int>> s;
    for(int i=0;i<n;++i)
    {
        for(int j=0;j<n;++j)
        {
            char c;
            cin>>c;
            a[i][j]=c;
            if(c=='#')
            {
                s.pb({i,j});
            }
        }
    }
    vector<pair<int,int>> t;
    for(int i=0;i<n;++i)
    {
        for(int j=0;j<n;++j)
        {
            char c;
            cin>>c;
            b[i][j]=c;
            if(c=='#')
            {
                t.pb({i,j});
            }
        }
    }
    debug(s);
    debug(t);
    if(sz(s)!=sz(t))
    {
        cout<<"No\n";
    }
    else{
        for(int z=0;z<4;++z)
        {
            rotatematrix(n,a);
            s.clear();
            for(int i=0;i<n;++i)
            {
                for(int j=0;j<n;++j)
                {
                    if(a[i][j]=='#')
                    {
                        s.pb({i,j});
                    }
                }
            }
            int diff=abs(s[0].first - t[0].first) + abs(s[0].second - t[0].second);
            bool stat=true;
            for(int w=1;w<sz(s);++w)
            {
                int diff1=abs(s[w].first - t[w].first) + abs(s[w].second - t[w].second);
                if(diff1!=diff)
                {
                    stat=false;
                    break;
                }
            }
            if(stat)
            {
                cout<<"Yes\n";
                return;
            }
        }
        cout<<"No\n";
    }
}