#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int f = 1, x = 0;
  char s = getchar();
  while (s < '0' || s > '9') {
    if (s == '-') f = -1;
    s = getchar();
  }
  while (s >= '0' && s <= '9') {
    x = x * 10 + s - 48;
    s = getchar();
  }
  return f * x;
}
const int N = 1005;
struct node {
  int r, d, v;
} g[N * N];
int val[N * N];
int n, m, q;
inline int id(int x, int y) { return x * (m + 1) + y; }
int main() {
  n = read(), m = read(), q = read();
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++) g[id(i, j)].v = read();
  for (int i = 0; i <= n; i++)
    for (int j = 0; j <= m; j++)
      g[id(i, j)].d = id(i + 1, j), g[id(i, j)].r = id(i, j + 1);
  while (q--) {
    int x1 = read(), y1 = read(), x2 = read(), y2 = read(), h = read(),
        w = read();
    int t1 = 0, t2 = 0;
    for (int i = 1; i < x1; i++) t1 = g[t1].d;
    for (int i = 1; i < y1; i++) t1 = g[t1].r;
    for (int i = 1; i < x2; i++) t2 = g[t2].d;
    for (int i = 1; i < y2; i++) t2 = g[t2].r;
    int p1 = t1, p2 = t2;
    for (int i = 1; i <= w; i++) {
      p1 = g[p1].r, p2 = g[p2].r;
      swap(g[p1].d, g[p2].d);
    }
    for (int i = 1; i <= h; i++) {
      p1 = g[p1].d, p2 = g[p2].d;
      swap(g[p1].r, g[p2].r);
    }
    p1 = t1, p2 = t2;
    for (int i = 1; i <= h; i++) {
      p1 = g[p1].d, p2 = g[p2].d;
      swap(g[p1].r, g[p2].r);
    }
    for (int i = 1; i <= w; i++) {
      p1 = g[p1].r, p2 = g[p2].r;
      swap(g[p1].d, g[p2].d);
    }
  }
  int last = 0;
  for (int i = 1; i <= n; i++) {
    int res = g[last].d;
    last = res;
    for (int j = 1; j <= m; j++) {
      res = g[res].r;
      printf("%d ", g[res].v);
    }
    puts("");
  }
  return 0;
}
