#include <stdio.h>
#define N 35
int n, m, i, j, k, x, y, ok;
char a[N][N], b[N][N], c[N][N];
int zhuan(){
    for(i=1; i<=n; i++){
        for(j=1; j<=m; j++){
            c[i][j] = a[i+x>n?i+x-n:i+x][j];
        }
    }//之间旋转x次,所有行等于+x行的位置
    for(i=1; i<=n; i++){
        for(j=1; j<=m; j++){
            if(c[i][j+y>m?j+y-m:j+y] != b[i][j]) return 0;
        }//列也一样,顺便判断是否相等
    }
    return 1;
}
int main(){
    scanf("%d%d", &n, &m);
    for(i=1; i<=n; i++){
        scanf("%s", a[i]+1);
    }
    for(i=1; i<=n; i++){
        scanf("%s", b[i]+1);
    }
    for(x=0; x<n; x++){//周期性:没旋转n次是一个周期
        for(y=0; y<m; y++){
            if(zhuan()) ok = 1;
        }//枚举旋转x次行,y次列
    }
    printf("%s\n", ok?"Yes":"No");
    return 0;
}

作者 crxis

发表回复