#include <bits/stdc++.h>
using namespace std;
struct node {
  long long val;
  int dir[2];
} A[2005 * 2005];
int n, m, q;
long long temp[2005 * 2005];
char st[2005 * 2005];
map<int, string> mp;
int getid(int x, int y) { return x * m + y; }
inline int read() {
  int f = 1, x = 0;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  return x * f;
}
void getst(int &p, int x, int y) {
  for (int i = 1; i < x; i++) p = A[p].dir[1];
  for (int i = 1; i < y; i++) p = A[p].dir[0];
}
void change(int st1, int st2, int l, int w, int typ) {
  for (int i = 1; i <= l; i++) {
    st1 = A[st1].dir[typ];
    st2 = A[st2].dir[typ];
    swap(A[st1].dir[1 - typ], A[st2].dir[1 - typ]);
  }
  typ = 1 - typ;
  for (int i = 1; i <= w; i++) {
    st1 = A[st1].dir[typ];
    st2 = A[st2].dir[typ];
    swap(A[st1].dir[1 - typ], A[st2].dir[1 - typ]);
  }
}
void getpoite() {
  for (int i = 0; i <= n; i++)
    for (int j = 0; j <= m; j++) {
      A[getid(i, j)].dir[0] = getid(i, j + 1);
      A[getid(i, j)].dir[1] = getid(i + 1, j);
    }
}
int main() {
  n = read(), m = read(), q = read();
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++) {
      scanf("%s", st);
      mp[getid(i, j)] = st;
      A[getid(i, j)].val = getid(i, j);
    }
  getpoite();
  while (q--) {
    int x1, y1, x2, y2, h, w, st1, st2;
    x1 = read(), y1 = read(), st1 = 0;
    x2 = read(), y2 = read(), st2 = 0;
    h = read(), w = read();
    getst(st1, x1, y1);
    getst(st2, x2, y2);
    change(st1, st2, h, w, 1);
    change(st1, st2, w, h, 0);
  }
  int p = 0;
  for (int i = 1; i <= n; i++) {
    p = A[p].dir[1];
    int p0 = p;
    for (int j = 1; j <= m; j++) {
      p0 = A[p0].dir[0];
      cout << mp[A[p0].val] << " ";
    }
    printf("\n");
  }
  return 0;
}
