페이지가 로드되지 않나요? 여기를 눌러보면 고쳐질 수도 있어요.
Placeholder

#2638

입력숫자(중) 1초 32MB

문제

아래 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 ) ;
    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

여러분은 mystery.c에서 생성된 Y를 파일로 받아서 그것의 입력에 해당하는 X를 찾아내는 프로그램을 작성해야 한다.

 


입력

첫줄에는 정수 N(3≤N≤30)이 주어진다.

그리고 두 번째 줄에는 100이하 양의 정수 N개가 빈칸을 사이에 두고 모두 나열되어 있다. 

 

단, 입출력예3의 경우와 같이 그 정수 중에는 같은 수가 있을 수도 있다. 

 

<제약조건> 

• 부분문제 1: 전체 점수 100점 중 15점에 해당하는 데이터에 대해서, N≤10, NUM 배열의 숫자들은 N이하의 양의 정수이고, 한번 씩 나타난다. 

• 부분문제 2: 전체 점수의 100점 중 21점에 해당하는 데이터에 대해서, N≤20, NUM 배열의 숫자들은 1 또는 2이다. 

• 부분문제 3: 전체 점수의 100점 중 29점에 해당하는 데이터에 대해서, N≤20, NUM 배열의 숫자들은 100이하의 양의 정수이다. 

• 부분문제 4: 전체 점수의 100점 중 35점에 해당하는 데이터에 대해서, N≤30, NUM 배열의 숫자들은 100이하의 양의 정수이다.


출력

첫 줄에는 정수 N이 제시되어 있고, 그 다음 줄에는 N개의 양의 정수가 빈칸을 사이에 두고 기록되어 있어야 한다.

만일 mystery.c의 입력파일 X가 없는 경우에는 음수인 -1 을 첫 줄에 출력하면 된다.


예제1

입력
5

12435
출력
5

12345

예제2

입력
10

12486375109
출력
10

12345678910

예제3

입력
10

557433109326
출력
10

573326510943

출처

KOI 전국 2013 중2

역링크