만드는 중입니다

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

뒤집기

시간 제한3초메모리 제한512 MB

요약
주어진 수열을 두 부분으로 나눠 각각 뒤집은 뒤 이어 붙일 때, 모든 분할 위치 중 사전순으로 가장 앞서는 수열을 구한다.
난이도

보통10점 중 7점

유형
배열, 문자열 매칭, 정렬, 구현
정답자
아직 제출이 없습니다

문제

길이가 NN인 수열이 있다. 같은 수가 여러 번 나올 수 있고, 모든 수는 2312^{31}보다 작은 자연수이다.

이 수열을 길이가 0이 아닌 두 부분으로 나눈 다음, 두 부분 각각의 순서를 반대로 뒤집어서 원래의 앞뒤 순서 그대로 다시 이어 붙인다. 나누는 위치에 따라 서로 다른 수열이 만들어진다. 이렇게 만들 수 있는 수열 중 사전순으로 가장 먼저 오는 것을 출력하는 프로그램을 작성하여라.

사전순 비교는 첫 번째 수가 작은 쪽이 먼저 오고, 첫 번째 수가 같으면 두 번째 수가 작은 쪽이 먼저 오고, 두 번째 수도 같으면 세 번째 수를 비교하는 식으로 이어진다. 여기서 비교하는 수열의 길이는 모두 같다.

입력

첫째 줄에 정수 NN(2≤N≤4×1062 \le N \le 4 \times 10^6)이 주어진다. 둘째 줄에 수열을 이루는 NN개의 수가 공백을 사이에 두고 차례대로 주어진다. 각 수는 2312^{31}보다 작은 자연수이다.

출력

만들 수 있는 수열 중 사전순으로 가장 먼저 오는 것을 첫째 줄에 출력한다. NN개의 수를 공백 하나로 구분해 한 줄에 출력한다.

예제3

  1. 예제 1

    입력
    10
    2 1 3 1 2 1 3 1 3 1
    
    예상 출력
    1 2 1 3 1 2 1 3 1 3
    
  2. 예제 2

    입력
    2
    5 3
    
    예상 출력
    5 3
    
  3. 예제 3

    입력
    4
    3 2 5 1
    
    예상 출력
    2 3 1 5