#include <bits/stdc++.h>
using namespace std;
inline void rd(int &a) {
  a = 0;
  char c;
  while (c = getchar(), !isdigit(c))
    ;
  do a = a * 10 + (c ^ 48);
  while (c = getchar(), isdigit(c));
}
const int M = 1e3 + 5;
struct LK {
  int pre, nxt, up, dw;
} G[M * M];
int main() {
  int n, m, q;
  cin >> n >> m >> q;
  static int A[M * M];
  static int head[M];
  for (int i = 1; i <= n; ++i)
    for (int j = 1; j <= m; ++j) {
      rd(A[(i - 1) * m + j]);
      int id = (i - 1) * m + j;
      G[id].up = (i - 2) * m + j;
      G[id].dw = i * m + j;
      if (j == 1)
        head[i] = id, G[id].pre = -1;
      else
        G[id].pre = id - 1;
      if (j == m)
        G[id].nxt = -1;
      else
        G[id].nxt = id + 1;
    }
  for (int a, b, c, d, x, y; q--;) {
    rd(a), rd(b), rd(c), rd(d), rd(x), rd(y);
    int st1, st2, ed1, ed2;
    for (int v = head[a], cnt = 1; cnt <= b; v = G[v].nxt, ++cnt)
      if (cnt == b) st1 = v;
    for (int v = head[c], cnt = 1; cnt <= d; v = G[v].nxt, ++cnt)
      if (cnt == d) st2 = v;
    for (int v = head[a], cnt = 1; cnt <= b + y - 1; v = G[v].nxt, ++cnt)
      if (cnt == b + y - 1) ed1 = v;
    for (int v = head[c], cnt = 1; cnt <= d + y - 1; v = G[v].nxt, ++cnt)
      if (cnt == d + y - 1) ed2 = v;
    for (int v = st1, u = st2, cnt = 1, hd1 = a, hd2 = c, s = ed1, t = ed2;
         cnt <= x; v = G[v].dw, u = G[u].dw, s = G[s].dw, t = G[t].dw, ++cnt,
             ++hd1, ++hd2) {
      if (cnt == 1) {
        for (int r = u, k = v; r != G[t].nxt; r = G[r].nxt, k = G[k].nxt) {
          int up = G[k].up, flag = 0;
          if (up > 0) G[up].dw = r;
          up = G[r].up;
          if (up > 0) G[up].dw = k;
          swap(G[k].up, G[r].up);
        }
      }
      if (cnt == x) {
        for (int r = u, k = v; r != G[t].nxt; r = G[r].nxt, k = G[k].nxt) {
          int dw = G[k].dw;
          if (dw <= n * m) G[dw].up = r;
          dw = G[r].dw;
          if (dw <= n * m) G[dw].up = k;
          swap(G[k].dw, G[r].dw);
        }
      }
      bool flag = 0;
      if (head[hd1] == v && head[hd2] == u)
        swap(head[hd1], head[hd2]);
      else {
        if (head[hd1] == v)
          head[hd1] = u, flag = 1;
        else
          G[G[v].pre].nxt = u;
        if (head[hd2] == u && !flag)
          head[hd2] = v;
        else
          G[G[u].pre].nxt = v;
      }
      flag = 0;
      if (~G[s].nxt && ~G[t].nxt)
        swap(G[G[s].nxt].pre, G[G[t].nxt].pre);
      else {
        if (~G[s].nxt) G[G[s].nxt].pre = t, flag = 1;
        if (!flag && ~G[t].nxt) G[G[t].nxt].pre = s;
      }
      swap(G[v].pre, G[u].pre);
      swap(G[s].nxt, G[t].nxt);
    }
  }
  for (int i = 1; i <= n; ++i) {
    for (int v = head[i]; ~v; v = G[v].nxt) printf("%d ", A[v]);
    puts("");
  }
  return 0;
}
