fork download
  1. /*
  2. * Author: Geeza
  3. */
  4.  
  5.  
  6. #include <bits/stdc++.h>
  7.  
  8. #define ld long double
  9. #define ll long long
  10. #define pb push_back
  11. #define fin(a, n) for(int i = a; i < n; i++)
  12. #define fjn(a, n) for(int j = a; j < n; j++)
  13. #define all(a) a.begin(),a.end()
  14. #define allr(a) a.rbegin(),a.rend()
  15. #define FAST ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr)
  16.  
  17. using namespace std;
  18.  
  19. const double PI = acos(-1);
  20. const int N = 1e5 + 10, M = 1e3 + 10, LOG = 20;
  21. const ll oo = 0x3f3f3f3f3f3f3f3f;
  22. const int mod = 998244353, inf = 1e6;
  23. const ld EPS = 1e-9;
  24.  
  25. string di[] = {"D", "L", "U", "R", "UL", "UR", "DL", "DR"};
  26. int dx[] = {+1, +0, +0, -1, -1, -1, +1, +1};
  27. int dy[] = {+0, -1, +1, +0, -1, +1, -1, +1};
  28. char dc[] = {'D', 'L', 'R', 'U'};
  29.  
  30. void solve() {
  31. ll n, m; cin >> n >> m;
  32. vector<string> v(n);
  33. fin(0, n) cin >> v[i];
  34.  
  35. auto valid = [&](int x, int y) {
  36. return x >= 0 && x < n && y >= 0 && y < m;
  37. };
  38.  
  39. string ok = "snuke";
  40.  
  41. auto hor = [&](int x, int y) {
  42. string s = "";
  43. for (int i = 0; i < 5; i++) {
  44. int ny = y + i;
  45. if (valid(x, ny)) {
  46. s += v[x][ny];
  47. continue;
  48. }
  49. return false;
  50. }
  51. return s == ok;
  52. };
  53.  
  54. auto hor_rev = [&](int x, int y) {
  55. string s = "";
  56. for (int i = 0; i < 5; i++) {
  57. int ny = y - i;
  58. if (valid(x, ny)) {
  59. s += v[x][ny];
  60. continue;
  61. }
  62. return false;
  63. }
  64. return s == ok;
  65. };
  66.  
  67. auto ver = [&](int x, int y) {
  68. string s = "";
  69. for (int i = 0; i < 5; i++) {
  70. int nx = x + i;
  71. if (valid(nx, y)) {
  72. s += v[nx][y];
  73. continue;
  74. }
  75. return false;
  76. }
  77. return s == ok;
  78. };
  79.  
  80. auto verRev = [&](int x, int y) {
  81. string s = "";
  82. for (int i = 0; i < 5; i++) {
  83. int nx = x - i;
  84. if (valid(nx, y)) {
  85. s += v[nx][y];
  86. continue;
  87. }
  88. return false;
  89. }
  90. return s == ok;
  91. };
  92.  
  93. auto diag = [&](int x, int y) {
  94. string s = "";
  95. for (int i = 0; i < 5; i++) {
  96. int nx = x + i, ny = y + i;
  97. if (valid(nx, ny)) {
  98. s += v[nx][ny];
  99. continue;
  100. }
  101. return false;
  102. }
  103. return s == ok;
  104. };
  105.  
  106. auto diagRev = [&](int x, int y) {
  107. string s = "";
  108. for (int i = 0; i < 5; i++) {
  109. int nx = x - i, ny = y - i;
  110. if (valid(nx, ny)) {
  111. s += v[nx][ny];
  112. continue;
  113. }
  114. return false;
  115. }
  116. return s == ok;
  117. };
  118.  
  119. auto diagUR = [&](int x, int y) {
  120. string s = "";
  121. for (int i = 0; i < 5; i++) {
  122. int nx = x - i, ny = y + i;
  123. if (valid(nx, ny)) {
  124. s += v[nx][ny];
  125. continue;
  126. }
  127. return false;
  128. }
  129. return s == ok;
  130. };
  131.  
  132. auto diagDL = [&](int x, int y) {
  133. string s = "";
  134. for (int i = 0; i < 5; i++) {
  135. int nx = x + i, ny = y - i;
  136. if (valid(nx, ny)) {
  137. s += v[nx][ny];
  138. continue;
  139. }
  140. return false;
  141. }
  142. return s == ok;
  143. };
  144.  
  145. fin(0, n) {
  146. fjn(0, m) {
  147.  
  148. if (hor(i, j)) {
  149. for (int k = 0; k < 5; k++) {
  150. int ny = j + k;
  151. cout << i + 1 << " " << ny + 1 << "\n";
  152. }
  153. return;
  154. }
  155.  
  156. if (hor_rev(i, j)) {
  157. for (int k = 0; k < 5; k++) {
  158. int ny = j - k;
  159. cout << i + 1 << " " << ny + 1 << "\n";
  160. }
  161. return;
  162. }
  163.  
  164. if (ver(i, j)) {
  165. for (int k = 0; k < 5; k++) {
  166. int nx = i + k;
  167. cout << nx + 1 << " " << j + 1 << "\n";
  168. }
  169. return;
  170. }
  171.  
  172. if (verRev(i, j)) {
  173. for (int k = 0; k < 5; k++) {
  174. int nx = i - k;
  175. cout << nx + 1 << " " << j + 1 << "\n";
  176. }
  177. return;
  178. }
  179.  
  180. if (diag(i, j)) {
  181. for (int k = 0; k < 5; k++) {
  182. int nx = i + k, ny = j + k;
  183. cout << nx + 1 << " " << ny + 1 << "\n";
  184. }
  185. return;
  186. }
  187.  
  188. if (diagRev(i, j)) {
  189. for (int k = 0; k < 5; k++) {
  190. int nx = i - k, ny = j - k;
  191. cout << nx + 1 << " " << ny + 1 << "\n";
  192. }
  193. return;
  194. }
  195.  
  196. if (diagUR(i, j)) {
  197. for (int k = 0; k < 5; k++) {
  198. int nx = i - k, ny = j + k;
  199. cout << nx + 1 << " " << ny + 1 << "\n";
  200. }
  201. return;
  202. }
  203.  
  204. if (diagDL(i, j)) {
  205. for (int k = 0; k < 5; k++) {
  206. int nx = i + k, ny = j - k;
  207. cout << nx + 1 << " " << ny + 1 << "\n";
  208. }
  209. return;
  210. }
  211. }
  212. }
  213. }
  214.  
  215. int main() {
  216. FAST;
  217. #ifndef ONLINE_JUDGE
  218. freopen("input.txt", "r",stdin);
  219. freopen("output.txt", "w",stdout);
  220. #endif
  221. int tt = 1, c = 1; //cin >> tt;
  222. while (tt--) {
  223. // cout << "Case " << c++ << ":\n";
  224. solve();
  225. }
  226. return 0;
  227. }
  228.  
Success #stdin #stdout 0s 5320KB
stdin
Standard input is empty
stdout
Standard output is empty