#include <bits/stdc++.h>
int n, m, q;
int v[(1010)][(1010)];
std::pair<int, int> right[(1010)][(1010)], down[(1010)][(1010)];
std::pair<int, int> move(std::pair<int, int> u, int x, int y) {
  while (x--) u = down[u.first][u.second];
  while (y--) u = right[u.first][u.second];
  return u;
}
int main() {
  scanf("%d%d%d", &n, &m, &q);
  for (int i = 0; i <= n; ++i) {
    for (int j = 0; j <= m; ++j) {
      right[i][j] = {i, j + 1};
      down[i][j] = {i + 1, j};
    }
  }
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= m; ++j) {
      scanf("%d", &v[i][j]);
    }
  }
  while (q--) {
    int a, b, c, d, h, w;
    scanf("%d%d%d%d%d%d", &a, &b, &c, &d, &h, &w);
    auto ou1 = move({0, 0}, a - 1, b), ou2 = move({0, 0}, c - 1, d);
    auto ol1 = move({0, 0}, a, b - 1), ol2 = move({0, 0}, c, d - 1);
    auto ir1 = move({0, 0}, a, b + w - 1), ir2 = move({0, 0}, c, d + w - 1);
    auto id1 = move({0, 0}, a + h - 1, b), id2 = move({0, 0}, c + h - 1, d);
    for (int i = 1; i <= w; ++i) {
      std::swap(down[ou1.first][ou1.second], down[ou2.first][ou2.second]);
      std::swap(down[id1.first][id1.second], down[id2.first][id2.second]);
      ou1 = move(ou1, 0, 1);
      ou2 = move(ou2, 0, 1);
      id1 = move(id1, 0, 1);
      id2 = move(id2, 0, 1);
    }
    for (int i = 1; i <= h; ++i) {
      std::swap(right[ol1.first][ol1.second], right[ol2.first][ol2.second]);
      std::swap(right[ir1.first][ir1.second], right[ir2.first][ir2.second]);
      ol1 = move(ol1, 1, 0);
      ol2 = move(ol2, 1, 0);
      ir1 = move(ir1, 1, 0);
      ir2 = move(ir2, 1, 0);
    }
  }
  for (int i = 1; i <= n; ++i) {
    auto u = move({0, 0}, i, 0);
    for (int j = 1; j <= m; ++j) {
      u = move(u, 0, 1);
      printf("%d%c", v[u.first][u.second], " \n"[j == m]);
    }
  }
  return 0;
}
