뒤집기

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

보통7배열문자열 매칭정렬구현아직 제출이 없습니다시간 제한3초메모리 제한512 MB

문제

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

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

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

입력

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

출력

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