순열

시간 제한2초메모리 제한128 MB

요약
B[A[A[i]]] = i를 만족하는 순열 B가 주어질 때 이를 만드는 순열 A를 구하거나 존재하지 않음을 판정합니다.
난이도

보통10점 중 7점

유형
수학, 정수론, 그래프, 조합론
정답자
아직 제출이 없습니다

문제

1부터 N까지의 정수가 한 번씩만 들어 있는 배열 A[1..N]가 있다. 배열 B[1..N]는 A로부터 다음 규칙에 따라 만들어진다.

B[A[A[i]]] = i (1 <= i <= N)

배열 B가 주어졌을 때, 이 B를 만들 수 있는 배열 A를 찾아라. 그런 배열 A가 존재하지 않을 수도 있다. 가능한 배열 A가 둘 이상이면 그중 아무거나 하나만 출력하면 된다.

입력

첫째 줄에 배열 B의 원소 개수 N이 주어진다. (1 <= N <= 20,000)

둘째 줄부터 N개의 줄에 걸쳐 B[1], ..., B[N]이 순서대로 하나씩 주어진다.

출력

해가 존재하면 첫째 줄에 N을 출력한다. 다음 N개의 줄에는 A[1], ..., A[N]을 순서대로 하나씩 출력한다.

해가 존재하지 않으면 첫째 줄에 0을 출력한다.

예제1

  1. 예제 1

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