#include <bits/stdc++.h>
using namespace std;
void solve();
int main() {
  int t = 1;
  while (t--) {
    solve();
  }
  return 0;
}
namespace input {
inline int nextInt() {
  int res = 0;
  char c = getchar();
  while (c < '0' || c > '9') c = getchar();
  while (c >= '0' && c <= '9') res = res * 10 + c - '0', c = getchar();
  return res;
}
inline long long nextLong() {
  long long res = 0;
  char c = getchar();
  while (c < '0' || c > '9') c = getchar();
  while (c >= '0' && c <= '9') res = res * 10 + c - '0', c = getchar();
  return res;
}
inline bool isSpace(const char &c) {
  return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
}
inline void next(char *str) {
  char c = getchar();
  while (isSpace(c)) c = getchar();
  size_t head = 0;
  while (!isSpace(c)) str[head++] = c, c = getchar();
  str[head] = 0;
}
inline char nextChar() {
  char c = getchar();
  while (isSpace(c)) c = getchar();
  return c;
}
}  // namespace input
using namespace input;
const int N = 1e3 + 5;
struct cell {
  cell *left = nullptr;
  cell *right = nullptr;
  cell *up = nullptr;
  cell *down = nullptr;
  int value;
};
cell grid[N][N];
cell *get(int x, int y) {
  cell *cur = &grid[0][1];
  for (int i = 0; i < x; i++) {
    cur = cur->down;
  }
  for (int i = 1; i < y; i++) {
    cur = cur->right;
  }
  return cur;
}
int ans[N][N];
void solve() {
  int n = nextInt();
  int m = nextInt();
  int q = nextInt();
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++) {
      grid[i][j].value = nextInt();
      grid[i][j].up = &grid[i - 1][j];
      grid[i][j].down = &grid[i + 1][j];
      grid[i][j].left = &grid[i][j - 1];
      grid[i][j].right = &grid[i][j + 1];
      grid[i - 1][j].down = &grid[i][j];
      grid[i + 1][j].up = &grid[i][j];
      grid[i][j + 1].left = &grid[i][j];
      grid[i][j - 1].right = &grid[i][j];
    }
  }
  while (q--) {
    int a = nextInt();
    int b = nextInt();
    int c = nextInt();
    int d = nextInt();
    int h = nextInt();
    int w = nextInt();
    cell *first = get(a, b);
    cell *second = get(c, d);
    cell *temp = nullptr;
    for (int i = 0; i < w; i++) {
      first->up->down = second;
      second->up->down = first;
      temp = second->up;
      second->up = first->up;
      first->up = temp;
      if (i + 1 < w) {
        first = first->right, second = second->right;
      }
    }
    for (int i = 0; i < h; i++) {
      first->right->left = second;
      second->right->left = first;
      temp = second->right;
      second->right = first->right;
      first->right = temp;
      if (i + 1 < h) {
        first = first->down, second = second->down;
      }
    }
    for (int i = 0; i < w; i++) {
      first->down->up = second;
      second->down->up = first;
      temp = second->down;
      second->down = first->down;
      first->down = temp;
      if (i + 1 < w) {
        first = first->left, second = second->left;
      }
    }
    for (int i = 0; i < h; i++) {
      first->left->right = second;
      second->left->right = first;
      temp = second->left;
      second->left = first->left;
      first->left = temp;
      if (i + 1 < h) {
        first = first->up, second = second->up;
      }
    }
  }
  cell *head = get(1, 1);
  for (int i = 0; i < n; i++) {
    cell *cur = head;
    for (int j = 0; j < m; j++, cur = cur->right) {
      printf("%d ", cur->value);
    }
    head = head->down;
    puts("");
  }
}
