삼중항 트리

a²+b²+c² = k(ab+bc+ca)+1을 만족하는 세 쌍 (a,b,c)를 (1,k,k+k²)에서 두 연산으로 생성하고, 세 수가 모두 처음 나오는 쌍만 순서대로 n개 출력한다.

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

문제

1보다 큰 정수 kk에 대해 a2+b2+c2=k(ab+bc+ca)+1a^2 + b^2 + c^2 = k(ab + bc + ca) + 1 을 만족하는 양의 정수 삼중항 (a,b,c)(a, b, c)는 무수히 많다.

삼중항 (1,k,k+k2)(1, k, k + k^2)은 이 식을 만족한다. 또 a<b<ca < b < c인 삼중항 (a,b,c)(a, b, c)가 이 식을 만족하면 다음 두 삼중항도 이 식을 만족하고, 세 수는 이미 작은 것부터 놓여 있다. (b,  c,  k(b+c)a),(a,  c,  k(a+c)b)(b,\; c,\; k(b + c) - a), \qquad (a,\; c,\; k(a + c) - b) (1,k,k+k2)(1, k, k + k^2)에서 시작해 두 연산을 반복해서 얻는 삼중항 전체를 SS라 한다.

SS의 삼중항을 가장 큰 수가 작은 것부터 나열한다. 가장 큰 수가 같으면 가운데 수가 작은 삼중항을 앞에 두고, 가운데 수까지 같으면 가장 작은 수가 작은 삼중항을 앞에 둔다. 이 순서로 삼중항을 하나씩 보면서, 이미 출력한 수를 모아 둔 집합 UU와 비교한다. 세 수 모두 UU에 없으면 그 삼중항을 출력하고 세 수를 UU에 넣는다. 세 수 중 하나라도 UU에 있으면 건너뛴다. 이렇게 출력되는 삼중항 중 앞의 nn개를 구하라.

이 규칙으로 출력하는 3n3n개의 수는 서로 다르고, 100자리를 넘지 않는다.

입력

첫째 줄에 정수 kknn이 공백으로 구분되어 주어진다. (2k10002 \le k \le 1000, 1n10001 \le n \le 1000)

출력

nn개의 줄에 위에서 정한 순서대로 삼중항을 출력한다. 각 줄에는 삼중항 하나의 세 수를 작은 것부터 공백으로 구분해 출력한다.