#include <bits/stdc++.h>
using namespace std;
inline int Read() {
  char c = getchar();
  int num = 0;
  while ('0' > c || c > '9') c = getchar();
  while ('0' <= c && c <= '9') num = num * 10 + c - '0', c = getchar();
  return (num);
}
int a[1010][1010], n, m, q;
struct Node {
  int x, y;
} lf[1010][1010], rg[1010][1010], up[1010][1010], dn[1010][1010];
inline Node Get(int x, int y) {
  Node rs = (Node){x, 0};
  for (int i = 1; i <= y; i++) rs = rg[rs.x][rs.y];
  return (rs);
}
int main() {
  scanf("%d%d%d", &n, &m, &q);
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++) a[i][j] = Read();
  for (int i = 1; i <= n; i++) {
    rg[i][0] = (Node){i, 1}, lf[i][m + 1] = (Node){i, m};
    for (int j = 1; j <= m; j++)
      lf[i][j] = (Node){i, j - 1}, rg[i][j] = (Node){i, j + 1};
  }
  for (int j = 1; j <= m; j++) {
    dn[0][j] = (Node){1, j}, up[n + 1][j] = (Node){n, j};
    for (int i = 1; i <= n; i++)
      up[i][j] = (Node){i - 1, j}, dn[i][j] = (Node){i + 1, j};
  }
  for (int k = 1; k <= q; k++) {
    int a_, b, c, d, h, w;
    scanf("%d%d%d%d%d%d", &a_, &b, &c, &d, &h, &w);
    Node AA = Get(a_, b), BB = Get(a_, b + w - 1), EE = Get(a_ + h - 1, b);
    Node CC = Get(c, d), DD = Get(c, d + w - 1), FF = Get(c + h - 1, d);
    Node A = AA, B = BB, C = CC, D = DD;
    for (int j = 1; j <= h; j++) {
      swap(rg[lf[A.x][A.y].x][lf[A.x][A.y].y],
           rg[lf[C.x][C.y].x][lf[C.x][C.y].y]);
      swap(lf[A.x][A.y], lf[C.x][C.y]);
      A = dn[A.x][A.y], C = dn[C.x][C.y];
      swap(lf[rg[B.x][B.y].x][rg[B.x][B.y].y],
           lf[rg[D.x][D.y].x][rg[D.x][D.y].y]);
      swap(rg[B.x][B.y], rg[D.x][D.y]);
      B = dn[B.x][B.y], D = dn[D.x][D.y];
    }
    A = AA, B = EE, C = CC, D = FF;
    for (int j = 1; j <= w; j++) {
      swap(dn[up[A.x][A.y].x][up[A.x][A.y].y],
           dn[up[C.x][C.y].x][up[C.x][C.y].y]);
      swap(up[A.x][A.y], up[C.x][C.y]);
      A = rg[A.x][A.y], C = rg[C.x][C.y];
      swap(up[dn[B.x][B.y].x][dn[B.x][B.y].y],
           up[dn[D.x][D.y].x][dn[D.x][D.y].y]);
      swap(dn[B.x][B.y], dn[D.x][D.y]);
      B = rg[B.x][B.y], D = rg[D.x][D.y];
    }
  }
  for (int i = 1; i <= n; i++) {
    Node x = (Node){i, 0};
    for (int j = 1; j <= m; j++) {
      x = rg[x.x][x.y];
      printf("%d ", a[x.x][x.y]);
    }
    puts("");
  }
}
