만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

블랙 박스

시간 제한1초메모리 제한2048 MB

요약
BlackBox가 출력한 리스트 Z를 입력받아, BlackBox(I)가 Z와 같아지는 입력 리스트 I를 복원합니다.
난이도

보통10점 중 7점

유형
시뮬레이션, 세그먼트 트리
정답자
아직 제출이 없습니다

문제

아래는 양의 정수들이 담긴 리스트를 받아 특정한 방식으로 섞은 뒤 결과를 리스트로 돌려주는 함수 BlackBox()의 Python 유사 의사코드이다.

아래에서 리스트 메서드 세 가지를 사용한다. 리스트 L에 대해 len(L)은 L의 원소 개수를 돌려준다. L.append(x)는 원소 x를 L의 끝에 추가한다. L.pop(idx)는 L에서 인덱스 idx의 원소를 제거하고, 제거한 원소를 돌려준다.

function BlackBox( Banana ):
    if len( Banana ) ≤ 4 :
        exit("Too small Banana")
    Apple = [] # [] is an empty list
    Mango = 0
    Papaya = len( Banana )

    while( Papaya >= 2 ) :
        Kiwi = Banana[ Mango ]
        Apple.append( Kiwi )
        Banana.pop( Mango )
        Papaya = Papaya - 1
        Mango = ( Kiwi + Mango - 1 ) % Papaya
    # end of while

    Apple.append( Banana[ 0 ] )
    Pear = len( Apple ) - 1
    Orange = Apple[ Pear ]
    Lime = Apple[ 0 ]
    Coconut = Orange % Pear
    Melon = Apple[ Coconut ]
    Apple[ 0 ] = Melon
    Apple[ Coconut ] = Lime

    return ( Apple )
# end of function BlackBox

양의 정수로 이루어진 리스트 Z가 주어진다. Z = BlackBox(I)를 만족하는 리스트 I를 복원하는 프로그램을 작성하라.

입력

첫째 줄에 리스트 Z에 담긴 정수의 개수인 양의 정수 nn이 주어진다. 여기서 5≤n≤200 0005 \le n \le 200\,000이다. 이어지는 nn개의 줄에는 Z의 정수가 한 줄에 하나씩 주어진다. ii번째 줄에는 Z의 ii번째 정수가 있으며, 이 값은 11 이상 100 000100\,000 이하이다.

출력

Z = BlackBox(I)를 만족하는 리스트 I의 정수 nn개를 한 줄에 하나씩 출력한다. ii번째 줄에는 I의 ii번째 정수를 출력한다.

예제2

  1. 예제 1

    입력
    13
    113
    49
    68
    91
    10
    179
    2
    71
    78
    45
    57
    10
    88
    
    예상 출력
    10
    113
    179
    68
    57
    45
    10
    2
    88
    71
    49
    78
    91
    
  2. 예제 2

    입력
    9
    6
    8
    7
    9
    5
    1
    2
    4
    3
    
    예상 출력
    9
    8
    7
    6
    5
    1
    2
    3
    4