#include #include using namespace std; int M[10100][10100]; int K[10100][10100]; typedef struct{ int k; int update; } part; part col[10100]; part row[10100]; int main() { int t, n, m, q; int a, x, y; 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("%d", &M[i][j]); for(int i = 1; i <= n; i++) { row[i].k = i; row[i].update = 0; } for(int i = 1; i <= m; i++) { col[i].k = i; col[i].update = 0; } for(int i = 0; i < q; i++) { scanf("%d %d %d", &a, &x, &y); switch(a) { case 1: swap(row[x], row[y]); break; case 2: swap(col[x], col[y]); break; case 3: row[x].update = row[x].update + y; break; case 4: col[x].update = col[x].update + y; break; } } for(int i = 1; i <= n; i++) for(int j = 1; j <= m; j++) K[i][j] = M[row[i].k][col[j].k] + row[i].update + col[j].update; for(int i = 1; i <= n; i++) { for(int j = 1; j <= m - 1; j++) printf("%d ", K[i][j]); printf("%d\n", K[i][m]); } } return 0; }