#include <bits/stdc++.h>
using namespace std;
const int maxn = 1000 + 10;
int n, m, q, a[maxn][maxn];
struct node {
  int right, down, val;
} e[maxn * maxn];
int main() {
  scanf("%d%d%d", &n, &m, &q);
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++) scanf("%d", &e[((i) * (m + 1) + (j))].val);
  for (int i = 0; i <= n; i++)
    for (int j = 0; j <= m; j++)
      e[((i) * (m + 1) + (j))].right = ((i) * (m + 1) + (j + 1)),
                         e[((i) * (m + 1) + (j))].down =
                             ((i + 1) * (m + 1) + (j));
  int x1, y1, x2, y2, h, w, p1, p2, t1, t2;
  while (q--) {
    scanf("%d%d%d%d%d%d", &x1, &y1, &x2, &y2, &h, &w);
    p1 = p2 = 0;
    for (int i = 1; i < x1; i++) p1 = e[p1].down;
    for (int i = 1; i < y1; i++) p1 = e[p1].right;
    for (int i = 1; i < x2; i++) p2 = e[p2].down;
    for (int i = 1; i < y2; i++) p2 = e[p2].right;
    t1 = p1;
    t2 = p2;
    for (int i = 1; i <= h; i++) {
      t1 = e[t1].down;
      t2 = e[t2].down;
      swap(e[t1].right, e[t2].right);
    }
    for (int i = 1; i <= w; i++) {
      t1 = e[t1].right;
      t2 = e[t2].right;
      swap(e[t1].down, e[t2].down);
    }
    t1 = p1;
    t2 = p2;
    for (int i = 1; i <= w; i++) {
      t1 = e[t1].right;
      t2 = e[t2].right;
      swap(e[t1].down, e[t2].down);
    }
    for (int i = 1; i <= h; i++) {
      t1 = e[t1].down;
      t2 = e[t2].down;
      swap(e[t1].right, e[t2].right);
    }
  }
  p1 = 0;
  for (int i = 1; i <= n; i++) {
    p1 = e[p1].down;
    p2 = e[p1].right;
    for (int j = 1; j <= m; j++, p2 = e[p2].right) printf("%d ", e[p2].val);
    printf("\n");
  }
  return 0;
}
