#include <iostream>
#include <iomanip>
#include <map>
#include <string>
#include <algorithm>
using namespace std;
namespace {
enum class Wall {
  none, x, y,
};
Wall wall(int n, int x, int y)
{
  int s = 1 << n;
  if (x == 0 || x == 2*s) return Wall::x;
  if (y == 0 || y == 2*s) return Wall::y;
  Wall wx = Wall::x;
  Wall wy = Wall::y;
  while (n > 0) {
    if ((x == 1 || x == 2*s-1) && y == s) return wx;
    if (x == s && y == s+1) return wy;
    if (x == s || y == s) return Wall::none;
    if (y > s) {
      if (x > s) x -= s;
      y -= s;
    } else {
      if (x > s) x = 2 * s - x;
      swap(wx, wy);
      swap(x, y);
    }
    --n;
    s /= 2;
  }
  return Wall::none;
}
}
int main()
{
  iostream::sync_with_stdio(false);
  cin.tie(nullptr);
  int n, z;
  cin >> n >> z;
  long long s = 1 << n;
  int x = 1;
  int y = 0;
  int vx = 1;
  int vy = 1;
  long long t;
  --z;
  cin >> t;
  for (long long d = 0; d <= 4*s*s; ++d) {
    while (d == t) {
      cout << x << ' ' << y << endl;
      if (z <= 0) return 0;
      cin >> t;
      --z;
    }
    x += vx;
    y += vy;
    auto w = wall(n, x, y);
    if (w == Wall::x) vx *= -1;
    else if (w == Wall::y) vy *= -1;
  }
  return 0;
}
        | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | #include <iostream> #include <iomanip> #include <map> #include <string> #include <algorithm> using namespace std; namespace { enum class Wall { none, x, y, }; Wall wall(int n, int x, int y) { int s = 1 << n; if (x == 0 || x == 2*s) return Wall::x; if (y == 0 || y == 2*s) return Wall::y; Wall wx = Wall::x; Wall wy = Wall::y; while (n > 0) { if ((x == 1 || x == 2*s-1) && y == s) return wx; if (x == s && y == s+1) return wy; if (x == s || y == s) return Wall::none; if (y > s) { if (x > s) x -= s; y -= s; } else { if (x > s) x = 2 * s - x; swap(wx, wy); swap(x, y); } --n; s /= 2; } return Wall::none; } } int main() { iostream::sync_with_stdio(false); cin.tie(nullptr); int n, z; cin >> n >> z; long long s = 1 << n; int x = 1; int y = 0; int vx = 1; int vy = 1; long long t; --z; cin >> t; for (long long d = 0; d <= 4*s*s; ++d) { while (d == t) { cout << x << ' ' << y << endl; if (z <= 0) return 0; cin >> t; --z; } x += vx; y += vy; auto w = wall(n, x, y); if (w == Wall::x) vx *= -1; else if (w == Wall::y) vy *= -1; } return 0; } | 
 
            
         English
                    English