#include <fstream> #include <iostream> #include <vector> using namespace std; using Matrix = vector<vector<int>>; ostream& operator<<(ostream& os, const vector<vector<int>>& mat) { for (int i = 0; i < mat.size(); ++i) { for (int j = 0; j < mat[i].size(); ++j) { os << mat[i][j] << " "; } os << endl; } return os; } class SubMatrix { public: SubMatrix(Matrix& mat, int row_start, int col_start, int size) : mat(mat), row_start(row_start), col_start(col_start), sz(size) {} int get(int row, int col) const { // cout << row << ", " << col << endl; // cout << row + row_start << ", " << col + col_start << endl; return mat[row + row_start][col + col_start]; } void set(int row, int col, int val) { mat[row + row_start][col + col_start] = val; } int size() const { return sz; } private: Matrix& mat; int row_start; int col_start; int sz; }; // rotate the submatrix clockwise for 90deg void rotate90(SubMatrix& submat) { int n = submat.size(); for (int i = 0; i < n / 2; ++i) { for (int j = 0; j < n - i - 1; ++j) { int temp = submat.get(i, j); submat.set(i, j, submat.get(n - j - 1, i)); submat.set(n - j - 1, i, submat.get(n - i - 1, n - j - 1)); submat.set(n - i - 1, n - j - 1, submat.get(j, n - i - 1)); submat.set(j, n - i - 1, temp); } } } // rotate the submatrix counterclockwise for 90deg void rotate90c(SubMatrix& submat) { int n = submat.size(); for (int i = 0; i < n / 2; ++i) { for (int j = 0; j < n - i - 1; ++j) { int temp = submat.get(i, j); submat.set(i, j, submat.get(j, n - i - 1)); submat.set(j, n - i - 1, submat.get(n - i - 1, n - j - 1)); submat.set(n - i - 1, n - j - 1, submat.get(n - j - 1, i)); submat.set(n - j - 1, i, temp); } } } void print(const SubMatrix& submat) { for (int i = 0; i < submat.size(); ++i) { for (int j = 0; j < submat.size(); ++j) { cout << submat.get(i, j) << " "; } cout << endl; } } int main() { // ifstream input("input.txt"); istream &input = cin; vector<vector<int>> matrix(5, vector<int>(5)); for (int i = 0; i < 5; ++i) { for (int j = 0; j < 5; ++j) { input >> matrix[i][j]; } } // cout << matrix << endl; int n = 0, m = 0, x1 = 0, y1 = 0; // 1 clockwise // 2 counterclockwise // 2 4 digits // 3 9 digits input >> n >> m >> x1 >> y1; x1 -= 1; y1 -= 1; int size = 0; if (m == 2) { size = 2; } else { size = 3; } void (*pfn)(SubMatrix&) = nullptr; if (n == 1) { pfn = &rotate90; } else { pfn = &rotate90c; } // cout << matrix << endl; SubMatrix submat(matrix, x1, y1, size); // print(submat); // cout << endl; pfn(submat); cout << matrix << endl; }