#include #include #include using namespace std; typedef long long LL; const int maxn = 1000+10; LL mat[maxn][maxn]; LL mat2[maxn][maxn]; int n, m, q; char str[20]; void op1(int x, int y){ for(int j = 1; j <= m; j++){ swap(mat[x][j], mat[y][j]); } } void op2(int x, int y){ for(int i = 1; i <= n; i++){ swap(mat[i][x], mat[i][y]); } } void op3(int x, int y){ for(int j = 1; j <= m; j++){ mat[x][j] += (LL)y; } } void op4(int x, int y){ for(int i = 1; i <= n; i++){ mat[i][x] += (LL)y; } } int posx[maxn]; int posy[maxn]; LL addx[maxn]; LL addy[maxn]; int main(){ int T; scanf("%d", &T); while(T--){ scanf("%d%d%d", &n, &m, &q); for(int i = 1; i <= n; i++){ for(int j = 1; j <= m; j++){ scanf("%I64d", &mat[i][j]); mat2[i][j] = mat[i][j]; } } memset(addx, 0, sizeof(addx)); memset(addy, 0, sizeof(addy)); for(int i = 1; i <= n; i++)posx[i] = i; for(int i = 1; i <= m; i++)posy[i] = i; int op, x, y; while(q--){ scanf("%d%d%d", &op, &x, &y); if(op == 1)swap(posx[x], posx[y]); else if(op == 2)swap(posy[x], posy[y]); else if(op == 3)addx[posx[x]] += (LL)y; else addy[posy[x]] += (LL)y; } for(int j = 1; j <= m; j++){ for(int i = 1; i <= n; i++)mat[i][j] += (LL)addy[j]; } for(int i = 1; i <= n; i++){ for(int j = 1; j <= m; j++)mat[i][j] += (LL)addx[i]; } for(int i = 1; i <= n; i++){ for(int j = 1; j <= m; j++)mat2[i][j] = mat[posx[i]][posy[j]]; } /*for(int j = 1; j <= m; j++){ for(int i = 1; i <= n; i++)mat2[i][j] = mat[i][posy[j]]; }*/ for(int i = 1; i <= n; i++){ for(int j = 1; j <= m; j++){ printf("%I64d", mat2[i][j]); if(j == m)printf("\n"); else printf(" "); } } } return 0; }