#include <bits/stdc++.h>
using namespace std;
const int N = 1010, K = 666;
bool vis[1005][1005];
int cnt[5];
struct P {
  int x, y;
} s, t[K + 5];
void move(int dx, int dy) {
  s.x += dx;
  s.y += dy;
  if (vis[s.x][s.y]) s.x -= dx;
  printf("%d %d\n", s.x, s.y);
  fflush(stdout);
  int a, b, c;
  scanf("%d%d%d", &a, &b, &c);
  if (a <= 0) exit(0);
  vis[t[a].x][t[a].y] = false;
  t[a].x = b;
  t[a].y = c;
  vis[t[a].x][t[a].y] = true;
}
int main() {
  scanf("%d%d", &s.x, &s.y);
  for (int i = (1); i <= (K); i++)
    scanf("%d%d", &t[i].x, &t[i].y), vis[t[i].x][t[i].y] = true;
  while (s.x > 500) move(-1, 0);
  while (s.x < 500) move(1, 0);
  while (s.y > 500) move(0, -1);
  while (s.y < 500) move(0, 1);
  for (int i = (1); i <= (K); i++) cnt[(t[i].x < 500) * 2 + (t[i].y < 500)]++;
  int mini = 0x3f3f3f3f, pnt;
  for (int i = (0); i <= (3); i++)
    if (mini > cnt[i]) mini = cnt[i], pnt = i;
  while (1) move(pnt / 2 ? 1 : -1, pnt % 2 ? 1 : -1);
  return 0;
}
