EduBrick

M. Яблоко от яблони

2000 мс · 256 МБ · всё или ничего

На яблоне висят nn яблок — шаров. Яблоко задано координатами своей самой верхней точки x,y,zx, y, z и радиусом rr; значит, центр шара находится в (x, y, z−r)(x,\ y,\ z - r). Ось OzOz направлена вверх. Изначально никакие два яблока не пересекаются и не соприкасаются.

Первое яблоко отрывается и падает строго вниз. Задев по дороге другое яблоко, оно срывает и его, и то тоже начинает падать. Определите, какие яблоки упадут.

Графа во входных данных нет — его надо построить. Вершины — яблоки, ребро a→ba \to b означает «падающее aa заденет bb». Ответ — множество вершин, достижимых из первой.

Всё содержание задачи в том, когда падающее aa задевает bb. Пусть центры шаров — (xa,ya,za)(x_a, y_a, z_a) и (xb,yb,zb)(x_b, y_b, z_b). Тогда aa заденет bb ровно если

(xa−xb)2+(ya−yb)2≤(ra+rb)2иzb<za.(x_a - x_b)^2 + (y_a - y_b)^2 \le (r_a + r_b)^2 \quad\text{и}\quad z_b < z_a.

Первое условие — что шар bb попадает в вертикальный цилиндр, который заметает падающий aa. Второе — что bb ниже: падая, aa уходит вниз, и до того, что выше, ему не дотянуться.

Сравнение только целочисленное — извлекать корни не нужно и вредно.

Формат ввода

Первая строка содержит число nn (1≤n≤2001 \le n \le 200).

Далее идут nn строк по четыре целых числа xix_i, yiy_i, ziz_i, rir_i (−104≤xi,yi,zi≤104-10^4 \le x_i, y_i, z_i \le 10^4, 1≤ri≤1041 \le r_i \le 10^4).

Формат вывода

В первой строке — количество упавших яблок.

Во второй — их номера по возрастанию.

Примеры

ввод
4
0 0 10 4
5 0 3 1
-7 4 7 1
0 1 2 6
вывод
3
1 2 4
ввод
2
0 0 0 1
0 0 100 1
вывод
1
1
Войдите, чтобы отправлять решения.