아래 mystery.c는 입력 파일 X를 읽어 그 안에 적힌 N개의 정수를 배열 NUM에 저장한 뒤, 이 N개의 수를 특정한 순서로 화면에 출력하는 프로그램이다. mystery.c가 입력 파일 X를 받아 화면에 출력한 결과를 Y라고 하자.
#include <stdio.h>
int NUM[101] ;
FILE *fin ;
int main(){
int i, token,N ;
int count=0, from= 0, value ;
fin = fopen("X","r");
fscanf(fin,"%d",&N);
for(i=0; i<N; i++){
fscanf(fin,"%d",&token);
NUM[i]= token;
} /* end of for */
printf("%d\n", N ) ;
value = NUM[ from ] ;
while( count < N ) {
while( value == 0 ) {
from = (from+1)%N;
value = NUM[ from ] ;
} /* end of inner while */
printf("%d ", value ) ;
count++ ;
NUM[ from ] = 0 ;
from = (value +from )% N ;
value = NUM[ from ] ;
} /* end of outer while */
return(0);
} /* end of main() */
여러분이 풀어야 할 문제는 이 과정을 거꾸로 뒤집는 것이다. mystery.c가 출력한 Y를 입력으로 받아, 그 Y를 만들어 낸 원래 입력 파일 X를 복원하는 프로그램을 작성하라.
첫째 줄에 정수 N (1 ≤ N ≤ 30)이 주어진다. 둘째 줄에는 mystery.c가 출력한 수열, 즉 100 이하의 양의 정수 N개가 공백으로 구분되어 주어진다. 이 수들 중에는 같은 값이 여러 번 나타날 수도 있다.
첫째 줄에 정수 N을, 둘째 줄에 복원한 입력 파일 X의 양의 정수 N개를 공백으로 구분하여 출력한다. 만약 주어진 Y를 만들어 내는 입력 파일 X가 존재하지 않으면 첫째 줄에 -1만 출력한다.