Language:

English
Russian

Практикум по программированию

Для участников:
Регистрация  ||   Вход
Список соревнований
Вы не вошли в систему! Вход или регистрация.

Спираль

Time limit:1 sec.
Memory limit: 262144 KByte

Маленький мальчик Данила нарисовал на листе бумаги множество точек. После чего решил соединить их в спираль, закручивающуюся по часовой стрелке. Получилось весьма красиво.

 

130d5d75df613a3091de6ad834fde9d93f76d02f

 

Однако, некоторые точки остались неиспользованными. Данила заинтересовался вопросом, а какое максимальное количество точек из нарисованных можно использовать для построения такой спирали. Но так как он еще маленький, то помочь ему решить эту задачу придется Вам.

Итак, на плоскости задано множество, состоящее из N различных точек с координатами (xiyi), где 1 ≤ i ≤ N. Ваша задача построить закручивающуюся по часовой стрелке спираль, содержащую максимальное количество точек из данного множества в качестве узлов. При этом каждая соседняя пара узлов спирали соединяется отрезком прямой линии. Спираль не должна иметь точек самопересечения или касания. Кроме того, спираль не должна иметь поворотов против часовой стрелки.

Первая строка входных данных содержит одно натуральное число N (2 ≤ N ≤ 1000). Последующие N строк содержат по 2 целых числа xi и yi — координаты соответствующей точки ( –10000 ≤ xi, yi ≤ 10000). Гарантируется, что никакие две точки не совпадают.

В первую строку выходных данных выведите одно натуральное число – количество точек, вошедших в спираль. Во второй строке выведите номера точек в порядке их включения в спираль (в порядке обхода), разделенные пробелами. Точки нумеруются с 1 до N в порядке следования во входных данных. При наличии нескольких правильных решений выведите любое.

Примеры

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

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

9
-2 2
0 2
2 2
-2 0
0 0
2 0
-2 -2
0 -2
2 -2

9
7 4 1 2 3 6 9 8 5

 

3
0 0
1 1
2 2

3
1 2 3

 

 

 

© Copyright ВоГУ, АВТ, Носов Д.А., Смоленцев К.Н.