주어진 수열에 들어맞는 가장 단순한 법칙을 찾아 다음 항을 예측한다. 여기서 다루는 법칙은 세 가지다. 수열의 원소는 모두 0 이상 m−1 이하의 정수이고, m은 입력으로 주어지며 10000을 넘지 않는다.
결국 상수가 되는 수열. 수열 a0 a1 … an … 에서 n≥d인 모든 n이 an=ad를 만족하는 수 d가 있으면, 이 수열은 결국 상수가 되는 수열이다. 그런 d 중 가장 작은 값이 이 수열의 차수다. 예를 들어 0 8 6 6 6 … 는 차수가 2인, 결국 상수가 되는 수열이다.
주기 수열. 씨앗 a0 a1 … ad 로 정해지고 n>d인 모든 n이 an=an−d−1을 만족하는 수열을 주기 수열이라 한다. 주기 수열의 차수 d는 a0 a1 … ad 가 그 수열의 씨앗이 되는 가장 작은 d다. 예를 들어 1 2 3 4 1 2 3 4 1 2 … 는 씨앗이 1 2 3 4이고 차수가 3인 주기 수열이다.
다항 수열. m을 법으로 하는 차수 d의 다항 수열은 차수가 d인 정수값 다항식이 만들어 내는 수열 a0 a1 … an … 이다. 예를 들어 0 0 1 3 6 10 15 1 … 은 an=(n2/2−n/2)mod20 이 만드는, 20을 법으로 하는 차수 2의 다항 수열이다. 다항 수열은 이렇게 정의할 수도 있다. 수열 a0 a1 … 가 모든 n에서 an=a0인 상수 수열이면 차수 0의 다항 수열이고, 항이 전부 0은 아닌 차수 d−1의 다른 수열 b0 b1 … 에서 모든 n이 an+1=(an+bn)modm 을 만족하도록 얻어지면 차수 d의 다항 수열이다. 두 번째 정의를 쓰면 곱셈도 나눗셈도 없이 예측 방법을 세울 수 있다. (xmody 는 x를 y로 나눈 나머지 r이고, 0≤r<y다.)
상수 수열은 세 법칙 어느 쪽에서 보아도 차수가 0인 수열이다.
할 일은 데이터에 들어맞는 법칙 중 차수가 가장 작은 것을 골라 그 법칙대로 다음 항을 예측하는 것이다. a0=0, a1=1, a2=0인 주기 수열에서 a3을 예측한다고 하자. 이 데이터는 씨앗이 0 1이고 차수가 1인 주기 수열을 따르므로 a3=1로 예측한다. 씨앗이 0 1 0이고 차수가 2인 주기 수열을 따라 a3=0으로 예측하면 안 된다.
결국 상수가 되는 수열, 주기 수열, 다항 수열 가운데 차수가 가장 작아지는 법칙을 직접 골라야 하는 과제도 있다. 주어지는 예측 과제의 답은 모두 하나로 정해진다.
입력은 예측 과제 여러 개로 이루어진다. 각 과제는 다음 네 형식 중 하나다.
Ec m a0 a1 … an−1: 결국 상수가 되는 수열Pe m a0 a1 … an−1: 주기 수열Po m a0 a1 … an−1: 다항 수열Se m a0 a1 … an−1: 차수가 가장 작은 법칙을 직접 골라야 하는 과제과제와 과제 사이는 세미콜론(;)으로 구분하고, 마지막 과제 뒤에는 마침표(.)가 온다. 한 과제를 이루는 토큰이 여러 줄에 걸쳐 나올 수도 있다.
n은 최대 90, m은 최대 10000이고, 모든 i에서 0≤ai≤m−1이다.
각 예측 과제마다 설명에 맞는 다음 항을 정수 하나로 한 줄에 출력한다.