"Kronecker's Knumbers"는 간판에 붙이는 플라스틱 숫자를 만드는 작은 회사다. 극장 간판이나 주유소 가격판에 올라가는 그 숫자다. 사장이자 유일한 직원인 Klyde Kronecker는 어떤 숫자를 몇 개 썼는지 장부에 적어 둔다. 전화번호 "5553141"이 적힌 간판을 방금 만들었다면, 한 열에는 5553141을 적고 옆 열에는 사용한 숫자의 개수를 적는다. 1이 둘, 3이 하나, 4가 하나, 5가 셋이다. 쓰지 않은 숫자는 장부에 올리지 않는다. 그는 이 내용을 21131435처럼 압축해서 쓴다.
며칠 전 Klyde는 31123314라는 수를 주문받았고, 이 수의 목록이 수 자신과 같다는 사실을 발견했다. 1이 셋, 2가 하나, 3이 셋, 4가 하나다. 그는 이런 수를 자기 목록 수라고 부른다. 어떤 수가 자기 목록 수인지, 또는 아래에 정의한 목록 연산을 반복하면 자기 목록 수에 도달하는지 알아내려 한다.
음이 아닌 정수 n의 목록은 c1d1c2d2⋯ckdk를 이어 붙인 정수다. 각 ci는 양의 정수, 각 di는 숫자이고 0≤d1<d2<⋯<dk≤9를 만족한다. n에 나타나는 모든 숫자 d에 대해 d=di인 i가 존재하며, 그 d는 n의 십진 표기에 정확히 ci번 나타난다. 5553141이라면 c1=2, d1=1, c2=1, d2=3 식으로 정해져 목록은 21131435가 된다. 1000000000000의 목록은 12011이다. 0이 열둘, 1이 하나다.
n이 자신의 목록과 같으면 n을 자기 목록 수라고 한다. 목록 연산을 j번 반복한 값이 자기 목록 수가 되는 가장 작은 j(j≥1)가 있으면, n은 j단계 후에 자기 목록 수가 된다고 한다. 21221314의 목록은 31321314이고, 31321314의 목록은 31123314이며, 31123314은 자기 목록 수다. 그래서 21221314은 2단계 후에 자기 목록 수가 된다.
어떤 j≥0에 대해 목록 연산을 j번 반복한 값과 j+k번 반복한 값이 같아지는 가장 작은 k가 2 이상이면, n은 길이 k의 목록 순환에 들어간다고 한다. 314213241519의 목록은 412223241519이고 412223241519의 목록은 다시 314213241519이므로, 314213241519은 길이 2의 목록 순환에 들어간다. 이 경우 j=0이다.
음이 아닌 정수의 수열을 읽어, 각 값이 자기 목록 수인지, 몇 단계 후에 자기 목록 수가 되는지, 길이 k의 목록 순환에 들어가는지, 아니면 목록 연산을 15번 적용해도 이 중 어디에도 해당하지 않는지 판정하는 프로그램을 작성하라.
음이 아닌 정수가 한 줄에 하나씩 주어진다. 각 정수는 최대 80자리이고 불필요한 앞자리 0은 없다. 마지막 줄에는 종료 값 -1이 오며, 이 값은 처리 대상이 아니다.
각 입력 값 n마다 아래 네 문장 중 하나를 한 줄에 출력한다. n은 입력에 적힌 그대로 쓰고, j는 양의 정수, k는 2 이상의 정수다.
n is self-inventorying
n becomes self-inventorying after j steps
n enters an inventory loop of length k
n can not be classified after 15 iterations
목록 연산은 최대 15번까지만 적용한다. 즉 n0=n부터 n15까지만 살펴보고, 이 값들에서 앞의 세 조건 중 어느 것도 확인되지 않으면 네 번째 문장을 출력한다. j=1일 때도 steps를 그대로 쓴다.