#include <bits/stdc++.h>
using namespace std;
struct node {
  int lft, rgt, up, down;
  int v;
} nd[1010 * 1010];
int n, m, q;
int calcId(int l, int r) { return l * (m + 1) + r + l; }
int getId(int l, int r) {
  int ret = calcId(l, 0);
  for (int i = 0; i < r; ++i) ret = nd[ret].rgt;
  return ret;
}
int main() {
  while (scanf("%d%d%d", &n, &m, &q) != EOF) {
    for (int i = 0; i <= n + 1; ++i) {
      for (int j = 0; j <= m + 1; ++j) {
        if (i)
          nd[calcId(i, j)].up = calcId(i - 1, j);
        else
          nd[calcId(i, j)].up = -1;
        if (j)
          nd[calcId(i, j)].lft = calcId(i, j - 1);
        else
          nd[calcId(i, j)].lft = -1;
        if (i != n + 1)
          nd[calcId(i, j)].down = calcId(i + 1, j);
        else
          nd[calcId(i, j)].down = -1;
        if (j != m + 1)
          nd[calcId(i, j)].rgt = calcId(i, j + 1);
        else
          nd[calcId(i, j)].rgt = -1;
        if (i && j && i != n + 1 && j != m + 1) {
          scanf("%d", &nd[calcId(i, j)].v);
        }
      }
    }
    for (int i = 0; i < q; ++i) {
      int a, b, c, d, h, w;
      scanf("%d%d%d%d%d%d", &a, &b, &c, &d, &h, &w);
      int lftId1 = getId(a, b);
      int lftId2 = getId(c, d);
      int curId1 = lftId1;
      int curId2 = lftId2;
      for (int j = 0; j < w; ++j) {
        int up1 = nd[curId1].up;
        int up2 = nd[curId2].up;
        nd[up1].down = curId2;
        nd[up2].down = curId1;
        nd[curId1].up = up2;
        nd[curId2].up = up1;
        if (j != w - 1) {
          curId1 = nd[curId1].rgt;
          curId2 = nd[curId2].rgt;
        }
      }
      for (int j = 0; j < h; ++j) {
        int rgt1 = nd[curId1].rgt;
        int rgt2 = nd[curId2].rgt;
        nd[rgt1].lft = curId2;
        nd[rgt2].lft = curId1;
        nd[curId1].rgt = rgt2;
        nd[curId2].rgt = rgt1;
        if (j != h - 1) {
          curId1 = nd[curId1].down;
          curId2 = nd[curId2].down;
        }
      }
      for (int j = 0; j < w; ++j) {
        int down1 = nd[curId1].down;
        int down2 = nd[curId2].down;
        nd[down1].up = curId2;
        nd[down2].up = curId1;
        nd[curId1].down = down2;
        nd[curId2].down = down1;
        if (j != w - 1) {
          curId1 = nd[curId1].lft;
          curId2 = nd[curId2].lft;
        }
      }
      for (int j = 0; j < h; ++j) {
        int lft1 = nd[curId1].lft;
        int lft2 = nd[curId2].lft;
        nd[lft1].rgt = curId2;
        nd[lft2].rgt = curId1;
        nd[curId1].lft = lft2;
        nd[curId2].lft = lft1;
        if (j != h - 1) {
          curId1 = nd[curId1].up;
          curId2 = nd[curId2].up;
        }
      }
    }
    int curId = calcId(1, 0);
    for (int i = 0; i < n; ++i) {
      curId = nd[curId].rgt;
      for (int j = 0; j < m - 1; ++j) {
        printf("%d ", nd[curId].v);
        curId = nd[curId].rgt;
      }
      printf("%d\n", nd[curId].v);
      curId = calcId(i + 2, 0);
    }
  }
  return 0;
}
