#include<bits/stdc++.h>
using namespace std;
#define int long long
typedef unsigned long long ull;
typedef pair<int,int> P;
struct st{
  int h,w;
  vector<string> vs;
  st(){}
  st(int h1,int w1,vector<string> ts){
    vs.push_back(string(w1+2,'.'));
    for(int i=0;i<h1;i++) vs.push_back('.'+ts[i]+'.'); 
    vs.push_back(string(w1+2,'.'));
    h=h1+2;w=w1+2;
    construct();
  }
  int ax[8]={1,-1,0,0,1,1,-1,-1};
  int ay[8]={0,0,1,-1,1,-1,1,-1};
  int color[111][111];
  int cnt;
  void construct(){
    //for(int i=0;i<h;i++) cout<<vs[i]<<endl;cout<<endl;
    memset(color,-1,sizeof(color));
    cnt=0;
    for(int i=0;i<h;i++){
      for(int j=0;j<w;j++){
	if(~color[i][j]) continue;
	queue<P> q;
	q.emplace(i,j);
	color[i][j]=cnt;
	while(!q.empty()){
	  P p=q.front();q.pop();
	  int y=p.first,x=p.second;
	  for(int k=0;k<4+4*(vs[i][j]=='#');k++){
	    int ny=y+ay[k],nx=x+ax[k];
	    if(ny<0||h<=ny||nx<0||w<=nx) continue;
	    if(vs[y][x]!=vs[ny][nx]) continue;
	    if(~color[ny][nx]) continue;
	    color[ny][nx]=cnt;
	    q.emplace(ny,nx);
	  }
	}
	cnt++;
      }
    }
    for(int i=0;i<h;i++){
      for(int j=0;j<w;j++){
	int y=i,x=j;
	for(int k=0;k<4;k++){
	  int ny=y+ay[k],nx=x+ax[k];
	  if(ny<0||h<=ny||nx<0||w<=nx) continue;
	  if(color[y][x]!=color[ny][nx]){
	    G[color[y][x]].insert(color[ny][nx]);
	    G[color[ny][nx]].insert(color[y][x]);
	  }
	}
      }
    }
  }
   
  set<int> G[11111];
  string dfs(int v,int p=-1){
    if(G[v].empty()) return "()";
    string res;
    vector<string> x;
    for(int i:G[v]) if(i!=p) x.push_back(dfs(i,v));
    sort(x.begin(),x.end());
    for(string i:x) res+=i;
    return "("+res+")";
  }
  string hash(){
    return dfs(0);
  }
};
signed main(){
  int h,w;
  while(cin>>h>>w,h||w){
    vector<string> vs(h);
    for(int i=0;i<h;i++) cin>>vs[i];
    st t1(h,w,vs);
    cin>>h>>w;
    vs.clear();vs.resize(h);
    for(int i=0;i<h;i++) cin>>vs[i];
    st t2(h,w,vs);
    if(t1.hash()==t2.hash()) cout<<"yes"<<endl;
    else cout<<"no"<<endl;
  }
  return 0;
}