격자점 C 찾기

격자점 A와 B가 주어질 때, 선분 AC와 BC가 각각 다른 격자점을 포함하지 않고 삼각형 ABC 내부에 격자점이 없도록 하는 격자점 C를 K개 출력한다.

어려움8정수론기하수학완전 탐색아직 제출이 없습니다시간 제한1초메모리 제한512 MB

문제

평면 위 서로 다른 두 격자점 AABB에 친구 두 명이 서 있다. 두 사람을 한 장에 담기 위해 다음 조건을 모두 만족하는 격자점 CC를 고른다.

  1. CCAA와 다르고 BB와도 다르다.
  2. 선분 ACAC 위에는 두 끝점 말고 다른 격자점이 없다.
  3. 선분 BCBC 위에는 두 끝점 말고 다른 격자점이 없다.
  4. 삼각형 ABCABC의 넓이가 00보다 크다. 즉 CCAABB를 지나는 직선 위에 있지 않다.
  5. 삼각형 ABCABC의 내부에는 격자점이 없다.

xx좌표와 yy좌표가 모두 정수인 점을 격자점이라고 한다.

사진은 한 장만 찍지 않으므로, 주어진 AABB마다 조건을 만족하는 CCKK개 구한다. 조건을 만족하는 CC는 무수히 많아서 답이 하나로 정해지지 않으므로, 그중 어느 KK개를 출력할지는 출력에서 정한 규칙을 따른다.

입력

첫 줄에 테스트 케이스의 개수 TT가 주어진다. (1T10001 \le T \le 1000)

다음 TT개의 줄에 정수 다섯 개 AxA_x, AyA_y, BxB_x, ByB_y, KK가 주어진다. A=(Ax,Ay)A = (A_x, A_y), B=(Bx,By)B = (B_x, B_y)이고 두 점은 서로 다르다. (109Ax,Ay,Bx,By109-10^9 \le A_x, A_y, B_x, B_y \le 10^9, 0K0 \le K, 모든 KK의 합은 2000020000 이하)

출력

각 테스트 케이스마다 점 CC의 좌표를 "CxC_x CyC_y" 형식으로 한 줄에 하나씩 KK줄 출력한다. K=0K = 0인 케이스에서는 아무것도 출력하지 않는다.

출력할 KK개의 점은 다음 규칙으로 정한다. 위 조건을 모두 만족하는 격자점 CC 가운데

s(C)=(BxAx)(CyAy)(ByAy)(CxAx)>0s(C) = (B_x - A_x)(C_y - A_y) - (B_y - A_y)(C_x - A_x) > 0

이면서

f(C)=(CxAx)(BxAx)+(CyAy)(ByAy)0f(C) = (C_x - A_x)(B_x - A_x) + (C_y - A_y)(B_y - A_y) \ge 0

인 점만 남긴다. 남은 점을 f(C)f(C)가 작은 것부터 차례로 KK개 출력한다.

남은 점은 무수히 많으므로 언제나 KK개를 고를 수 있고, 남은 점의 f(C)f(C) 값은 서로 다르므로 출력은 하나로 정해진다. 이 규칙으로 고른 점의 좌표는 절댓값이 101410^{14} 이하이다.