만드는 중입니다

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

이상한 트리 해싱

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

요약
주어진 루트 해시 값 h를 가지면서 서로 동형이 아닌 두 루트 트리를 출력합니다. 만들 수 없으면 -1을 출력합니다.
난이도

어려움10점 중 8점

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

문제

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

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

  • H(K)=2H(P1)H(P2)…H(Pr)H(K) = 2^{H(P_1)H(P_2) \dots H(P_r)}

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

양의 정수 hh가 주어질 때, 루트 정점의 해시값이 hh이고 서로 동형이 아닌 두 트리 T1,T2T_1, T_2를 출력하라.

입력

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

출력

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

두 번째 줄에 T1T_1의 22번 정점부터 nn번 정점까지 각 정점의 부모 정점의 번호 p2,p3,…,pnp_2, p_3, \ldots, p_n을 공백으로 분리하여 출력한다. (1≤pi<i1 \le p_i < i)

세 번째 줄에 T2T_2의 22번 정점부터 mm번 정점까지 각 정점의 부모 정점의 번호 q2,q3,…,qmq_2, q_3, \ldots, q_m을 공백으로 분리하여 출력한다. (1≤qi<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