#include #include #include #include #include #include #include #define MAX(x, y) ((x < y) ? y : x) #define MIN(x, y) ((x < y) ? x : y) typedef long long ll; typedef unsigned char byte; FILE* in = fopen("rotate.in", "rt"); FILE* out = fopen("rotate.out", "wt"); #define MAXN 1024 #define MAXM 1 int n; int help[1024]; int mat[1024][1024]; int t, r, c, k; void row() { if (k < 0) { k = -k; for (int i = n - 1, h=0; i >= 0; --i, ++h) { help[(h+k)%n] = mat[t][i]; } for (int i = n - 1, h = 0; i >= 0; --i, ++h) { mat[t][i] = help[h]; } } else if (k > 0) { for (int i = 0; i < n; ++i) { help[(i + k) % n] = mat[t][i]; } for (int i = 0; i < n; ++i) { mat[t][i] = help[i]; } } } void col() { if (k < 0) { k = -k; for (int i = n - 1, h = 0; i >= 0; --i, ++h) { help[(h + k) % n] = mat[i][t]; } for (int i = n - 1, h = 0; i >= 0; --i, ++h) { mat[i][t] = help[h]; } } else if (k > 0) { for (int i = 0; i < n; ++i) { help[(i + k) % n] = mat[i][t]; } for (int i = 0; i < n; ++i) { mat[i][t] = help[i]; } } } void mainD() { int size = n - abs(r - c); int off = r - c; int x, y; if (off > 0) { x = off; y = 0; } else { x = 0; y = -off; } if (k < 0) { k = -k; for (int i = size - 1, h = 0; i >= 0; --i, ++h) { help[(h + k) % size] = mat[x + i][y + i]; } for (int i = size - 1, h = 0; i >= 0; --i, ++h) { mat[x + i][y + i] = help[h]; } } else if (k > 0) { for (int i = 0; i < size; ++i) { help[(i + k) % size] = mat[x + i][y + i]; } for (int i = 0; i < size; ++i) { mat[x + i][y + i] = help[i]; } } } void revD() { int off = (n - 1) - (r + c); int size = n - abs(off); int x, y; if (off < 0) { x = n - 1; y = -off; } else { x = (n - 1) - off; y = 0; } if (k > 0) { for (int i = size - 1, h = 0; i >= 0; --i, ++h) { help[(h + k) % size] = mat[x - i][y + i]; } for (int i = size - 1, h = 0; i >= 0; --i, ++h) { mat[x - i][y + i] = help[h]; } } else if (k < 0) { k = -k; for (int i = 0; i < size; ++i) { help[(i + k) % size] = mat[x - i][y + i]; } for (int i = 0; i < size; ++i) { mat[x - i][y + i] = help[i]; } } } int main() { fscanf(in, "%d", &n); int temp = 1; for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { mat[i][j] = temp++; } } int R; fscanf(in, "%d", &R); char ch[16]; for (int i = 0; i < R; ++i) { fscanf(in, "%s", &ch); if (*ch == 'r') { fscanf(in, "%d%d", &t, &k); row(); } else if (*ch == 'c') { fscanf(in, "%d%d", &t, &k); col(); } else if (*ch == 'd') { fscanf(in, "%d%d%d", &r, &c, &k); mainD(); } else { fscanf(in, "%d%d%d", &r, &c, &k); revD(); } } int Q; fscanf(in, "%d", &Q); int xx, yy; for (int i = 0; i < Q; ++i) { fscanf(in, "%d%d", &xx, &yy); fprintf(out, "%d\n", mat[xx][yy]); } return 0; }