#define _CRT_SECURE_NO_WARNINGS #include <stdio.h>

int main() { int n, m, c, d; scanf("%d %d\n", &n, &m);//接受行(n)和列(m) int A[10][10]; for (c = 0; c < n; c++) //存储数组c行,d列(计算机会自动识别数字和字符,不用管输入时候的回车与空格) for (d = 0; d < m; d++) scanf("%d", &A[c][d]);

int k,h,a,b,x,y;
char t;
scanf("%d", &k);//读取操作次数
getchar();
for (h = 0; h < k; h++) //进行k次操作
{
    scanf("%c %d %d", &t,&a,&b);//(t判断操作类型,a,b接收操作对象)接下来有k行,每行包括一个字符t和两个数a和b,中间用空格格分隔,t代表需要执行的操作,当t为字符'r'时代表进行行变换,当t为字符'c'时代表进行列变换,a和b为需要互换的行或列(1≤a≤b≤n≤10,1≤a≤b≤m≤10)。
    a -= 1;//数组是从0开始第一个元素的
    b -= 1;
    if (t == 'r')//行操作
    {
        for (x = 0; x < m; x++)
        {
            y = A[a][x];
            A[a][x] = A[b][x];
            A[b][x] = y;
        }
    }
    if (t == 'c')//列操作
    {
        for (x = 0; x < n; x++)
        {
            y = A[x][a];
            A[x][a] = A[x][b];
            A[x][b] = y;
        }
       
    }
    getchar();
}

for (c = 0; c < n; c++)              //打印数组c行,d列
    for (d = 0; d < m; d++)
    {
        printf("%d ", A[c][d]);
        if (d == m-1 &&c!=n-1)//如果到最后一列,且不是最后一行,就要换行
            printf("\n");
    }
return 0;

}