소인수 거리

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

문제

양의 정수 사이의 거리를 다음과 같이 정의한다. 한 번의 연산은 어떤 수에 소수를 곱하거나, 그 수를 나누어떨어지게 하는 소수로 나누는 것이다. 두 양의 정수 aabb의 거리 d(a,b)d(a, b)aabb로 바꾸는 데 필요한 최소 연산 횟수이다. 예를 들어 d(69,42)=3d(69, 42) = 3이다.

함수 dd는 실제로 거리의 성질을 만족한다. 모든 양의 정수 aa, bb, cc에 대하여 다음이 성립한다.

  • 자기 자신과의 거리는 00이다: d(a,a)=0d(a, a) = 0.
  • 거리는 대칭이다: d(a,b)=d(b,a)d(a, b) = d(b, a).
  • 삼각 부등식이 성립한다: d(a,b)+d(b,c)d(a,c)d(a, b) + d(b, c) \ge d(a, c).

nn개의 양의 정수로 이루어진 수열 a1,a2,,ana_1, a_2, \dots, a_n이 주어진다. 각 aia_i에 대하여 jij \ne i이면서 d(ai,aj)d(a_i, a_j)를 가장 작게 하는 인덱스 jj를 구해야 한다.

입력

첫째 줄에 정수 nn (2n1000002 \le n \le 100000)이 주어진다. 이어지는 nn개의 줄에는 각각 정수 aia_i (1ai10000001 \le a_i \le 1000000)가 한 줄에 하나씩 주어진다.

출력

정확히 nn개의 줄을 출력하며, 각 줄에 정수 하나를 출력한다. ii번째 줄에는 1jn1 \le j \le n, jij \ne i이고 d(ai,aj)d(a_i, a_j)가 최소가 되는 인덱스 jj 중 가장 작은 값을 출력한다. 즉 aia_i까지의 거리가 최소가 되는 jij \ne i 인덱스들 가운데 가장 작은 인덱스를 출력한다.