D. Поиск прямых
ограничение по времени на тест
3 секунды
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

После очередного соревнования по спортивному программированию Рома решил попробовать себя в туризме. Его родная страна Ужляндия представляет собой декартову плоскость. Он планирует пройти по всем Главным Прямым Ужляндии. Как известно, все они имеют вид бесконечных прямых, параллельных осям координат (то есть выражаются уравнениями x = a или y = a, где a — целое число, называемое координатой прямой).

Поскольку Рома потерял свою карту, ему сначала нужно узнать координаты всех прямых. Дядя Антон согласился ему помочь на таких условиях:

  • Изначально Рома не знает количество вертикальных и горизонтальных прямых, а также их координаты;
  • Рома может называть целочисленные координаты точки на Ужляндии, а в ответ Антон будет говорить ему одно целое число — минимальное из расстояний от этой точки до каждой из Главных Прямых Ужляндии. Но, поскольку известно, что любая из этих прямых отдалена от точки пересечения координатных осей не более чем на 108, то и координаты точки, которые может назвать Рома, не должны превышать по абсолютному значению 108.

Так как дяде Антону нужно бежать на УОИ (Ужляндскую Олимпиаду по Информатике), он согласился ответить не более чем на 3·105 вопросов Ромы.

Но вот беда! Рома не знает как выведать у дяди Антона нужные координаты. Помогите ему! Узнайте координаты всех Главных Прямых Ужляндии.

Входные данные

Изначально входных данных нет. Ваша программа должна делать запросы, чтобы получить информацию.

Гарантируется, что количество прямых каждого вида не превосходит 104, и не меньше 1.

Протокол взаимодействия

Чтобы сделать запрос, вам нужно вывести «0 x y» (-108 ≤ x, y ≤ 108), где x и y — координаты точки. После каждого запроса нужно вывести перевод строки и сделать операцию «flush», после чего считать ответ — минимальное среди расстояний от точки запроса до Главных Прямых Ужляндии.

Вы можете сделать не более 3·105 запросов.

Когда вы будете готовы вывести ответ, выведите три строки:

  1. В первой строке выведите «1 n m», где n — количество вертикальных прямых (то есть параллельных оси OY), а m — горизонтальных (то есть параллельных оси OX).
  2. Во второй строке выведите n чисел x1, x2, ..., xn — координаты вертикальных прямых.
  3. В третьей строке в таком же формате выведите m чисел y1, y2, ..., ym — координаты горизонтальных прямых.

Координаты прямых можно выводить в любом порядке.

Чтобы сделать операцию «flush», сразу после вывода запроса и перевода строки нужно сделать:

  • fflush(stdout) в C++;
  • System.out.flush() в Java;
  • stdout.flush() в Python;
  • flush(output) в Pascal;
  • смотрите документацию для других языков.

Вы получите вердикт Wrong Answer, если сделаете больше запросов, чем можно, или если сделаете некорректный запрос.

Вы получите вердикт Idleness Limit Exceeded, если не будете ничего выводить (а тестирующая программа будет ожидать ввода) или забудете сделать операцию «flush» после какого-нибудь вывода.

Если ваша программа считает -1, она должна немедленно завершиться с нулевым кодом возврата (например, вызовом exit(0)). Это значит, что вы сделали слишком много запросов, или сделали некорректный запрос, и получите вердикт Wrong Answer. Если вы проигнорируете это, то можете получить другие вердикты, потому что ваша программа продолжит считывание из закрытого потока.

Описание теста для взлома

В первой строке теста должны быть записаны числа n и m (1 ≤ n, m ≤ 104).

Во второй строке должно быть n различных чисел xi (-108 ≤ xi ≤ 108) — координаты вертикальных прямых.

В третьей строке должно быть m различных чисел yi (-108 ≤ yi ≤ 108) — координаты горизонтальных прямых.

Координаты можно задавать в любом порядке.

Пример теста смотрите в замечании.

Пример
Входные данные
1
1
3
2
Выходные данные
0 1 2
0 -2 -2
0 5 6
0 -2 2
1 1 2
2
0 -3
Примечание

В примере был тест


1 2
2
0 -3

Минимальные расстояния:

  • от (1, 2) к x = 2;
  • от ( - 2,  - 2) к y =  - 3;
  • от (5, 6) к x = 2;
  • от ( - 2, 2) к y = 0.