이상한 트리 해싱

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

요약
h가 주어질 때 루트 해시값이 h인 서로 동형이 아닌 두 루트 있는 트리를 출력하고, 불가능하면 -1을 출력한다.
난이도

어려움10점 중 8점

유형
트리, 정수론, 수학, 재귀
정답자
아직 제출이 없습니다

문제

트리를 해싱한다면 두 트리가 동형인지 빠르게 확인할 수 있지 않을까?

루트 정점이 존재하는 트리가 있을 때, 트리의 각 정점 KK의 해시값 H(K)H(K)는 KK의 자식 정점 P_1,P_2,…,P_rP\_1, P\_2, \ldots , P\_r의 해시값 H(P_1),H(P_2),…,H(P_r)H(P\_1), H(P\_2), \ldots , H(P\_r)을 사용하여 다음과 같이 계산된다.

  • H(K)=2H(P_1)H(P_2)…H(P_r)H(K) = 2 ^ {H(P\_1)H(P\_2) \dots H(P\_r)}

이때, 리프 정점의 해시값은 22이다.

양의 정수 hh가 주어질 때, 루트 정점의 해시값이 hh이고 서로 동형이 아닌 두 트리 T_1,T_2T\_1, T\_2를 출력하라.

입력

첫 번째 줄에 루트 정점이 가져야 할 해시값 hh가 주어진다. (1≤h≤10181 \le h \le 10^{18})

출력

첫 번째 줄에 T_1T\_1과 T_2T\_2의 크기 n,mn, m을 공백으로 분리하여 출력한다. (1≤n,m≤100,0001 \le n, m \le 100\\,000 )

두 번째 줄에 T_1T\_1의 22번 정점부터 nn번 정점까지 각 정점의 부모 정점의 번호 p_2,p_3,…,p_np\_2, p\_3, \ldots , p\_n을 공백으로 분리하여 출력한다. (1≤p_i<i1 \le p\_i < i)

세 번째 줄에 T_2T\_2의 22번 정점부터 mm번 정점까지 각 정점의 부모 정점의 번호 q_2,q_3,…,q_mq\_2, q\_3, \ldots , q\_m을 공백으로 분리하여 출력한다. (1≤q_i<i1 \le q\_i < i)

11번 정점은 루트 정점이다.

서로 동형이 아닌 트리가 여러 쌍 있다면, 그 중 하나를 출력한다.

만약 조건을 만족하는 두 트리가 존재하지 않는다면 첫 번째 줄에 −1-1을 출력한다.

힌트

두 루트 있는 트리 G,HG, H가 동형이라는 것은 GG의 임의의 두 정점 u,vu, v가 주어졌을 때 GG에서 uu가 vv의 부모인 것과 HH에서 f(u)f(u)가 f(v)f(v)의 부모인 것이 필요충분조건인 일대일 함수 f:V(G)→V(H)f:V(G) \rightarrow V(H)가 존재한다는 것이다. 여기에서 V(G)V(G)와 V(H)V(H)는 각각 GG와 HH의 정점 집합을 의미한다.

예제2

  1. 예제 1

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

    입력
    3
    
    예상 출력
    -1