#include <bits/stdc++.h>
const int N = 105, Q = 10005;
int n, m, q;
int map[N][N], t[Q], row[Q], col[Q], x[Q];
void rowRotate(int num) {
  int temp = map[num][m - 1];
  for (int i = m - 1; i > 0; i--) {
    int t = map[num][i - 1];
    map[num][i] = t;
  }
  map[num][0] = temp;
}
void colRotate(int num) {
  int temp = map[n - 1][num];
  for (int i = n - 1; i > 0; i--) {
    int t = map[i - 1][num];
    map[i][num] = t;
  }
  map[0][num] = temp;
}
int main() {
  scanf("%d%d%d", &n, &m, &q);
  for (int i = 0; i < q; ++i) {
    scanf("%d", &t[i]);
    if (t[i] == 3) {
      scanf("%d%d%d", &row[i], &col[i], &x[i]);
    } else if (t[i] == 1) {
      scanf("%d", &row[i]);
    } else {
      scanf("%d", &col[i]);
    }
  }
  for (int i = q - 1; i >= 0; --i) {
    if (t[i] == 3) {
      map[row[i]][col[i]] = x[i];
    } else if (t[i] == 1) {
      int tmp = map[row[i]][m];
      for (int j = m; j > 1; --j) {
        map[row[i]][j] = map[row[i]][j - 1];
      }
      map[row[i]][1] = tmp;
    } else {
      int tmp = map[n][col[i]];
      for (int j = n; j > 1; --j) {
        map[j][col[i]] = map[j - 1][col[i]];
      }
      map[1][col[i]] = tmp;
    }
  }
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= m; ++j) {
      printf("%d%c", map[i][j], " \n"[j == m]);
    }
  }
  return 0;
}
