풍선 터뜨리기

아직 제출이 없습니다시간 제한1초메모리 제한128 MB

문제

존은 프로그래밍 대회를 좋아한다. 그런데 문제가 하나 있다. 그의 팀은 프로그래밍 실력이 그리 좋지 않다는 것이다. 보통은 이것이 그를 괴롭히지 않지만, 정답을 제출할 때마다 풍선을 하나씩 받는다는 사실만큼은 그를 괴롭힌다. 존의 팀은 풍선을 하나도 받지 못하는데, 다른 팀들은 풍선을 계속해서 받아 간다. 이에 좌절한 존은 다른 모든 팀도 풍선을 갖지 못하게 만들고 싶어 한다.

올해 그는 이를 이루기 위한 계획을 세웠다. 존은 모든 풍선을 터뜨리기 위해 닌자를 고용했다. 대회 도중 언제든지 그는 닌자를 부를 수 있고, 닌자는 천장의 구멍을 통해 내려와 표창(수리검)으로 풍선을 터뜨린 뒤 다시 천장의 구멍으로 빠져나간다. 물론 닌자는 소중한 표창을 최대한 적게 쓰고 싶어 한다. 따라서 존은 모든 풍선을 터뜨리는 데 필요한 표창의 최소 개수를 계산하는 프로그램을 작성해야 한다.

풍선들은 대체로 비슷한 높이에 있으므로, 이 문제를 2차원 문제로 모델링할 수 있다. 닌자가 들어오는 위치를 원점 $(0, 0)$으로 두고, 각 풍선을 하나의 원으로 나타낸다. 안전을 위해 이 원들은 서로 다른 반지름을 가질 수 있다. 표창은 원점에서 던져져 직선으로 날아간다고 가정하므로, 원점을 시작점으로 하는 반직선으로 볼 수 있다. 이 반직선이 지나가며 만나는 모든 원(풍선)은 터진다. 따라서 문제는 다음과 같다. 모든 원을 지나려면 원점에서 출발하는 반직선이 최소 몇 개 필요한가?

입력

입력의 첫 줄에는 테스트 케이스의 개수가 주어진다. 각 테스트 케이스의 형식은 다음과 같다.

  • 첫 줄에 정수 $n$ ($0 \le n \le 1000$): 풍선의 개수.
  • 이어지는 $n$개의 줄에는 각각 세 정수 $x_i$, $y_i$ ($-10^4 \le x_i, y_i \le 10^4$)와 $r_i$ ($1 \le r_i \le 10^4$)가 주어진다. 이는 $i$번째 풍선을 나타내는 원으로, $(x_i, y_i)$는 원의 중심이고 $r_i$는 반지름이다.

원점에서 출발하여 서로 다른 두 원에 접하는 두 반직선이 원점에서 이루는 각은 항상 $10^{-6}$ 라디안 이상이라고 가정해도 된다. 또한 원들은 서로 교차하지 않으며(닿을 수는 있다), 원점을 포함하지 않는다.

출력

각 테스트 케이스마다, 닌자가 모든 풍선을 터뜨리는 데 필요한 표창의 최소 개수를 한 줄에 하나의 정수로 출력한다.

힌트

두 번째 예제는 원래 문제에서 그림으로 설명되어 있었다.

면책 조항: 이 문제를 만드는 과정에서 다친 풍선은 없습니다.