#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f7f7f7f;
const int MAXN = 1005;
const double eps = 1e-10;
struct node {
  int val;
  int dir[2];
} E[MAXN * MAXN];
int n, m, q;
inline int get(int i, int j) { return i * (m + 1) + j + 1; }
int getpos(int x, int y) {
  int pos = 1;
  for (int i = 1; i < x; i++) {
    pos = E[pos].dir[1];
  }
  for (int i = 1; i < y; i++) {
    pos = E[pos].dir[0];
  }
  return pos;
}
void fun1(int pos1, int pos2, int h, int w) {
  for (int i = 1; i <= h; i++) {
    pos1 = E[pos1].dir[1];
    pos2 = E[pos2].dir[1];
    swap(E[pos1].dir[0], E[pos2].dir[0]);
  }
  for (int i = 1; i <= w; i++) {
    pos1 = E[pos1].dir[0];
    pos2 = E[pos2].dir[0];
    swap(E[pos1].dir[1], E[pos2].dir[1]);
  }
}
void fun2(int pos1, int pos2, int h, int w) {
  for (int i = 1; i <= w; i++) {
    pos1 = E[pos1].dir[0];
    pos2 = E[pos2].dir[0];
    swap(E[pos1].dir[1], E[pos2].dir[1]);
  }
  for (int i = 1; i <= h; i++) {
    pos1 = E[pos1].dir[1];
    pos2 = E[pos2].dir[1];
    swap(E[pos1].dir[0], E[pos2].dir[0]);
  }
}
int main() {
  int i, j;
  while (scanf("%d%d%d", &n, &m, &q) != EOF) {
    for (i = 0; i <= max(n, m); i++) {
      E[get(i, 0)].dir[0] = get(i, 1);
      E[get(i, 0)].dir[1] = get(i + 1, 0);
      E[get(0, i)].dir[0] = get(0, i + 1);
      E[get(0, i)].dir[1] = get(1, i);
    }
    for (i = 1; i <= n; i++) {
      for (j = 1; j <= m; j++) {
        scanf("%d", &E[get(i, j)].val);
        E[get(i, j)].dir[0] = get(i, j + 1);
        E[get(i, j)].dir[1] = get(i + 1, j);
      }
    }
    int x1, y1, x2, y2, w, h, pos1, pos2;
    while (q--) {
      scanf("%d%d%d%d%d%d", &x1, &y1, &x2, &y2, &h, &w);
      pos1 = getpos(x1, y1);
      pos2 = getpos(x2, y2);
      fun1(pos1, pos2, h, w);
      fun2(pos1, pos2, h, w);
    }
    for (i = 1; i <= n; i++) {
      pos1 = get(i, 0);
      for (j = 1; j <= m; j++) {
        pos1 = E[pos1].dir[0];
        printf("%d", E[pos1].val);
        if (j != m) printf(" ");
      }
      puts("");
    }
  }
  return 0;
}
