시간 제한
메모리 제한
시간 제한
3초
메모리 제한
256 MB
두 함수 f와 g (f,g:X→X)가 가환이라는 것은 모든 x∈X에 대해 f(g(x))=g(f(x))가 성립한다는 뜻이다. 예를 들어 f(x)=x+1과 g(x)=x−2는 가환이지만, f(x)=x+1과 g(x)=2x는 가환이 아니다.
모든 함수 h (h:Nn→Nn, 여기서 Nn={1,2,…,n}이고 n은 양의 정수)는 값 목록으로 나타낼 수 있다. 값 목록이란 i번째 원소가 h(i)와 같은 목록이다. 예를 들어 N5에서 N5로 가는 함수 h(x)=⌈x/2⌉의 값 목록은 [1,1,2,2,3]이다.
값 목록은 사전순으로 비교한다. 목록 [a1…an]이 목록 [b1…bn]보다 작다는 것은, 어떤 인덱스 k가 존재하여 ak<bk이고 모든 인덱스 l<k에 대해 al=bl인 경우를 말한다.
함수 f (f:X→X)가 전단사라는 것은 모든 y∈X에 대해 f(x)=y를 만족하는 x∈X가 정확히 하나 존재한다는 뜻이다.
전단사 함수 f (f:Nn→Nn)가 주어질 때, f와 가환이면서 값 목록이 사전순으로 가장 작은 함수 g를 구하여라.
첫째 줄에 전단사 함수 f의 값 목록에 들어 있는 원소의 개수를 나타내는 정수 n이 주어진다 (1≤n≤200000).
둘째 줄에 f의 값 목록이 주어진다. 이는 1,2,…,n의 순열을 이루는 n개의 정수이다.
f와 가환이면서 값 목록이 사전순으로 가장 작은 함수 g의 값 목록을, n개의 정수로 한 줄에 출력한다.