#include <bits/stdc++.h>
using namespace std;
#define all(ac) ac.begin(),ac.end()
#define task "tet"
#define fi first
#define se second
#define pii pair<int,int>
#define db long double
#define int long long
#define pb push_back
#define eb emplace_back
const int N = 505;
int n, m, a[N][N], q;
int MOD;
struct node {
int mx, mn;
node(int mx = -1e18, int mn = 1e18): mx(mx), mn(mn) {}
};
struct segtree {
int n;
vector <node> tree;
segtree(int n): n(n), tree(n << 2 | 1, node()) {}
node Merge(node a, node b) {
node res;
res.mx = max(a.mx, b.mx);
res.mn = min(a.mn, b.mn);
return res;
}
void update(int id, int l, int r, int pos, int w) {
if(l > pos || r < pos) return;
if(l == r) {
if(w == -1) tree[id] = node();
else {
tree[id].mx = w;
tree[id].mn = w;
}
return;
}
int mid = (l + r) >> 1;
update(id << 1, l, mid, pos, w);
update(id << 1 | 1, mid + 1, r, pos, w);
tree[id] = Merge(tree[id << 1], tree[id << 1 | 1]);
return;
}
node get(int id, int l, int r, int u, int v) {
if(l > v || r < u) return node();
if(l >= u && r <= v) return tree[id];
int mid = (l + r) >> 1;
return Merge(get(id << 1, l, mid, u, v), get(id << 1 | 1, mid + 1, r, u, v));
}
void update(int pos, int w) {
return update(1, 0, n - 1, pos, w), void();
}
node get(int l, int r) {
return get(1, 0, n - 1, l, r);
}
} Row(N * N), Col(N * N);
int32_t main() {
if(fopen(task".inp", "r")) {
freopen(task".inp", "r", stdin);
freopen(task".out", "w", stdout);
}
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
cin >> n >> m;
for(int i=1;i<=n;i++) {
for(int j=1;j<=m;j++) {
cin >> a[i][j];
Row.update(a[i][j], i);
Col.update(a[i][j], j);
}
}
MOD = n * m;
cin >> q;
int w = 0;
while(q--) {
int type; cin >> type;
if(type == 1) {
int r1, c1, r2, c2; cin >> r1 >> c1 >> r2 >> c2;
Row.update(a[r1][c1], r2);
Row.update(a[r2][c2], r1);
Col.update(a[r1][c1], c2);
Col.update(a[r2][c2], c1);
swap(a[r1][c1], a[r2][c2]);
}
else
if(type == 2) {
int ww; cin >> ww;
w = (w + ww) % MOD;
}
else {
int r1, c1, r2, c2; cin >> r1 >> c1 >> r2 >> c2;
if(r1 == 1 && c1 == 1 && r2 == n && c2 == m) {
cout << "-1\n";
continue;
}
int ans = -1;
if(w != 0) {
int p = MOD - w;
int lo = 0, hi = w - 1;
while(lo <= hi) {
int mid = (lo + hi) >> 1;
node val_row = Row.get(p, p + mid);
node val_col = Col.get(p, p + mid);
if(val_row.mx > r2 || val_row.mn < r1 || val_col.mx > c2 || val_col.mn < c1) {
ans = mid;
hi = mid - 1;
}
else lo = mid + 1;
}
}
if(ans != -1) {
cout << ans << '\n';
continue;
}
int lo = w, hi = MOD - 1;
while(lo <= hi) {
int mid = (lo + hi) >> 1;
node val_row = Row.get(0, mid - w);
node val_col = Col.get(0, mid - w);
if(val_row.mx > r2 || val_row.mn < r1 || val_col.mx > c2 || val_col.mn < c1) {
ans = mid;
hi = mid - 1;
}
else lo = mid + 1;
}
cout << ans << '\n';
}
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgYWxsKGFjKSBhYy5iZWdpbigpLGFjLmVuZCgpCiNkZWZpbmUgdGFzayAidGV0IgojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgcGlpIHBhaXI8aW50LGludD4KI2RlZmluZSBkYiBsb25nIGRvdWJsZQojZGVmaW5lIGludCBsb25nIGxvbmcKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBlYiBlbXBsYWNlX2JhY2sKCmNvbnN0IGludCBOID0gNTA1OwppbnQgbiwgbSwgYVtOXVtOXSwgcTsKaW50IE1PRDsKCnN0cnVjdCBub2RlIHsKICAgIGludCBteCwgbW47CiAgICBub2RlKGludCBteCA9IC0xZTE4LCBpbnQgbW4gPSAxZTE4KTogbXgobXgpLCBtbihtbikge30KfTsKCnN0cnVjdCBzZWd0cmVlIHsKICAgIGludCBuOwogICAgdmVjdG9yIDxub2RlPiB0cmVlOwogICAgCiAgICBzZWd0cmVlKGludCBuKTogbihuKSwgdHJlZShuIDw8IDIgfCAxLCBub2RlKCkpIHt9CiAgICAKICAgIG5vZGUgTWVyZ2Uobm9kZSBhLCBub2RlIGIpIHsKICAgICAgICBub2RlIHJlczsKICAgICAgICByZXMubXggPSBtYXgoYS5teCwgYi5teCk7CiAgICAgICAgcmVzLm1uID0gbWluKGEubW4sIGIubW4pOwogICAgICAgIHJldHVybiByZXM7CiAgICB9CiAgICAKICAgIHZvaWQgdXBkYXRlKGludCBpZCwgaW50IGwsIGludCByLCBpbnQgcG9zLCBpbnQgdykgewogICAgICAgIGlmKGwgPiBwb3MgfHwgciA8IHBvcykgcmV0dXJuOwogICAgICAgIGlmKGwgPT0gcikgewogICAgICAgICAgICBpZih3ID09IC0xKSB0cmVlW2lkXSA9IG5vZGUoKTsKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB0cmVlW2lkXS5teCA9IHc7CiAgICAgICAgICAgICAgICB0cmVlW2lkXS5tbiA9IHc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpbnQgbWlkID0gKGwgKyByKSA+PiAxOwogICAgICAgIHVwZGF0ZShpZCA8PCAxLCBsLCBtaWQsIHBvcywgdyk7CiAgICAgICAgdXBkYXRlKGlkIDw8IDEgfCAxLCBtaWQgKyAxLCByLCBwb3MsIHcpOwogICAgICAgIHRyZWVbaWRdID0gTWVyZ2UodHJlZVtpZCA8PCAxXSwgdHJlZVtpZCA8PCAxIHwgMV0pOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIAogICAgbm9kZSBnZXQoaW50IGlkLCBpbnQgbCwgaW50IHIsIGludCB1LCBpbnQgdikgewogICAgICAgIGlmKGwgPiB2IHx8IHIgPCB1KSByZXR1cm4gbm9kZSgpOwogICAgICAgIGlmKGwgPj0gdSAmJiByIDw9IHYpIHJldHVybiB0cmVlW2lkXTsKICAgICAgICAKICAgICAgICBpbnQgbWlkID0gKGwgKyByKSA+PiAxOwogICAgICAgIHJldHVybiBNZXJnZShnZXQoaWQgPDwgMSwgbCwgbWlkLCB1LCB2KSwgZ2V0KGlkIDw8IDEgfCAxLCBtaWQgKyAxLCByLCB1LCB2KSk7CiAgICB9CiAgICAKICAgIHZvaWQgdXBkYXRlKGludCBwb3MsIGludCB3KSB7CiAgICAgICAgcmV0dXJuIHVwZGF0ZSgxLCAwLCBuIC0gMSwgcG9zLCB3KSwgdm9pZCgpOwogICAgfQogICAgCiAgICBub2RlIGdldChpbnQgbCwgaW50IHIpIHsKICAgICAgICByZXR1cm4gZ2V0KDEsIDAsIG4gLSAxLCBsLCByKTsKICAgIH0KfSBSb3coTiAqIE4pLCBDb2woTiAqIE4pOwoKaW50MzJfdCBtYWluKCkgewogICAgaWYoZm9wZW4odGFzayIuaW5wIiwgInIiKSkgewogICAgICAgIGZyZW9wZW4odGFzayIuaW5wIiwgInIiLCBzdGRpbik7CiAgICAgICAgZnJlb3Blbih0YXNrIi5vdXQiLCAidyIsIHN0ZG91dCk7CiAgICB9CgogICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZSgwKSwgY291dC50aWUoMCk7CiAgICAKICAgIGNpbiA+PiBuID4+IG07CiAgICBmb3IoaW50IGk9MTtpPD1uO2krKykgewogICAgICAgIGZvcihpbnQgaj0xO2o8PW07aisrKSB7CiAgICAgICAgICAgIGNpbiA+PiBhW2ldW2pdOwogICAgICAgICAgICBSb3cudXBkYXRlKGFbaV1bal0sIGkpOwogICAgICAgICAgICBDb2wudXBkYXRlKGFbaV1bal0sIGopOwogICAgICAgIH0KICAgIH0KICAgIE1PRCA9IG4gKiBtOwogICAgCiAgICBjaW4gPj4gcTsKICAgIGludCB3ID0gMDsKICAgIHdoaWxlKHEtLSkgewogICAgICAgIGludCB0eXBlOyBjaW4gPj4gdHlwZTsKICAgICAgICBpZih0eXBlID09IDEpIHsKICAgICAgICAgICAgaW50IHIxLCBjMSwgcjIsIGMyOyBjaW4gPj4gcjEgPj4gYzEgPj4gcjIgPj4gYzI7CiAgICAgICAgICAgIFJvdy51cGRhdGUoYVtyMV1bYzFdLCByMik7CiAgICAgICAgICAgIFJvdy51cGRhdGUoYVtyMl1bYzJdLCByMSk7CiAgICAgICAgICAgIENvbC51cGRhdGUoYVtyMV1bYzFdLCBjMik7CiAgICAgICAgICAgIENvbC51cGRhdGUoYVtyMl1bYzJdLCBjMSk7CiAgICAgICAgICAgIHN3YXAoYVtyMV1bYzFdLCBhW3IyXVtjMl0pOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgaWYodHlwZSA9PSAyKSB7CiAgICAgICAgICAgIGludCB3dzsgY2luID4+IHd3OwogICAgICAgICAgICB3ID0gKHcgKyB3dykgJSBNT0Q7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBpbnQgcjEsIGMxLCByMiwgYzI7IGNpbiA+PiByMSA+PiBjMSA+PiByMiA+PiBjMjsKICAgICAgICAgICAgaWYocjEgPT0gMSAmJiBjMSA9PSAxICYmIHIyID09IG4gJiYgYzIgPT0gbSkgewogICAgICAgICAgICAgICAgY291dCA8PCAiLTFcbiI7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgaW50IGFucyA9IC0xOwogICAgICAgICAgICBpZih3ICE9IDApIHsKICAgICAgICAgICAgICAgIGludCBwID0gTU9EIC0gdzsKICAgICAgICAgICAgICAgIGludCBsbyA9IDAsIGhpID0gdyAtIDE7CiAgICAgICAgICAgICAgICB3aGlsZShsbyA8PSBoaSkgewogICAgICAgICAgICAgICAgICAgIGludCBtaWQgPSAobG8gKyBoaSkgPj4gMTsKICAgICAgICAgICAgICAgICAgICBub2RlIHZhbF9yb3cgPSBSb3cuZ2V0KHAsIHAgKyBtaWQpOwogICAgICAgICAgICAgICAgICAgIG5vZGUgdmFsX2NvbCA9IENvbC5nZXQocCwgcCArIG1pZCk7CiAgICAgICAgICAgICAgICAgICAgaWYodmFsX3Jvdy5teCA+IHIyIHx8IHZhbF9yb3cubW4gPCByMSB8fCB2YWxfY29sLm14ID4gYzIgfHwgdmFsX2NvbC5tbiA8IGMxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGFucyA9IG1pZDsKICAgICAgICAgICAgICAgICAgICAgICAgaGkgPSBtaWQgLSAxOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIGxvID0gbWlkICsgMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZihhbnMgIT0gLTEpIHsKICAgICAgICAgICAgICAgIGNvdXQgPDwgYW5zIDw8ICdcbic7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpbnQgbG8gPSB3LCBoaSA9IE1PRCAtIDE7CiAgICAgICAgICAgIHdoaWxlKGxvIDw9IGhpKSB7CiAgICAgICAgICAgICAgICBpbnQgbWlkID0gKGxvICsgaGkpID4+IDE7CiAgICAgICAgICAgICAgICBub2RlIHZhbF9yb3cgPSBSb3cuZ2V0KDAsIG1pZCAtIHcpOwogICAgICAgICAgICAgICAgbm9kZSB2YWxfY29sID0gQ29sLmdldCgwLCBtaWQgLSB3KTsKICAgICAgICAgICAgICAgIGlmKHZhbF9yb3cubXggPiByMiB8fCB2YWxfcm93Lm1uIDwgcjEgfHwgdmFsX2NvbC5teCA+IGMyIHx8IHZhbF9jb2wubW4gPCBjMSkgewogICAgICAgICAgICAgICAgICAgIGFucyA9IG1pZDsKICAgICAgICAgICAgICAgICAgICBoaSA9IG1pZCAtIDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGxvID0gbWlkICsgMTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb3V0IDw8IGFucyA8PCAnXG4nOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAwOwp9