#include //#include using namespace std; // using namespace atcoder; // using mint = modint1000000007; // const int mod = 1000000007; // using mint = modint998244353; // const int mod = 998244353; // const int INF = 1e9; // const long long LINF = 1e18; #define rep(i, n) for (int i = 0; i < (n); ++i) #define rep2(i, l, r) for (int i = (l); i < (r); ++i) #define rrep(i, n) for (int i = (n)-1; i >= 0; --i) #define rrep2(i, l, r) for (int i = (r)-1; i >= (l); --i) #define all(x) (x).begin(), (x).end() #define allR(x) (x).rbegin(), (x).rend() #define P pair template inline bool chmax(A& a, const B& b) { if (a < b) { a = b; return true; } return false; } template inline bool chmin(A& a, const B& b) { if (a > b) { a = b; return true; } return false; } #ifndef KWM_T_UTILITY_GRID_HPP #define KWM_T_UTILITY_GRID_HPP #include #include #include /** * @brief グリッド操作ユーティリティ * * 提供機能: * - rotate90 / 180 / 270 * - flip(上下・左右) * - transpose(転置) * * 典型用途: * - 盤面問題 * - 回転対称・一致判定 * * 計算量: * - すべて O(HW) * * 制約 / 注意: * - 長方形配列であること * * verified: */ namespace kwm_t::utility { // ==================== rotate ==================== // 90度回転(時計回り)string版 inline std::vector rotate90(const std::vector& g) { int h = (int)g.size(); int w = (int)g[0].size(); std::vector res(w, std::string(h, g[0][0])); for (int i = 0; i < h; ++i) { for (int j = 0; j < w; ++j) { res[j][h - 1 - i] = g[i][j]; } } return res; } // 90度回転(時計回り)汎用版 template std::vector> rotate90(const std::vector>& g) { int h = (int)g.size(); int w = (int)g[0].size(); std::vector> res(w, std::vector(h)); for (int i = 0; i < h; ++i) { for (int j = 0; j < w; ++j) { res[j][h - 1 - i] = g[i][j]; } } return res; } // 180度回転 template Grid rotate180(const Grid& g) { int h = (int)g.size(); int w = (int)g[0].size(); Grid res = g; for (int i = 0; i < h; ++i) { for (int j = 0; j < w; ++j) { res[h - 1 - i][w - 1 - j] = g[i][j]; } } return res; } // 270度回転(= 90度反時計回り) template Grid rotate270(const Grid& g) { return rotate90(rotate180(g)); } // ==================== flip ==================== // 上下反転 template Grid flip_vertical(const Grid& g) { Grid res = g; std::reverse(res.begin(), res.end()); return res; } // 左右反転 template Grid flip_horizontal(const Grid& g) { Grid res = g; for (auto& row : res) { std::reverse(row.begin(), row.end()); } return res; } // ==================== transpose ==================== // 転置(string版) inline std::vector transpose(const std::vector& g) { int h = (int)g.size(); int w = (int)g[0].size(); std::vector res(w, std::string(h, g[0][0])); for (int i = 0; i < h; ++i) { for (int j = 0; j < w; ++j) { res[j][i] = g[i][j]; } } return res; } // 転置(汎用版) template std::vector> transpose(const std::vector>& g) { int h = (int)g.size(); int w = (int)g[0].size(); std::vector> res(w, std::vector(h)); for (int i = 0; i < h; ++i) { for (int j = 0; j < w; ++j) { res[j][i] = g[i][j]; } } return res; } } // namespace kwm_t::utility #endif // KWM_T_UTILITY_GRID_HPP int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int n, m; cin >> n >> m; vectors(n); rep(i, n)cin >> s[i]; s = kwm_t::utility::rotate90(s); for (auto e : s)cout << e << endl; return 0; }