int main() {
    int n, m;
    scanf("%d %d", &n, &m);
    int val[n][m];
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            scanf("%d ", &val[i][j]);  //依次输入矩阵元素
        }
    }
    int k, a, b, temp;
    scanf("%d ", &k);  //输入操作执行次数
    char ch[k];
    for (int i = 0; i < k; i++) {
        scanf("%c %d %d\n", &ch[i], &a, &b);  //输入操作方式与操作对象
        if (ch[i] == 'r') {  //操作为行行变换'r'时
            for (int j = 0; j < m; j++) {  //操作对象间进行行行交换值
                temp = val[a - 1][j];
                val[a - 1][j] = val[b - 1][j];
                val[b - 1][j] = temp;
            }
        }
        if (ch[i] == 'c') { //操作为行行变换'c'时
            for (int k = 0; k < n; k++) {  //操作对象间进行列列交换值
                temp = val[k][a - 1];
                val[k][a - 1] = val[k][b - 1];
                val[k][b - 1] = temp;
            }
        }
    }
    for (int i = 0; i < n; i++) {  //输出变换后矩阵
        for (int j = 0; j < m; j++) {
            printf("%d ", val[i][j]);
        }
        printf("\n");
    }
    return 0;
}