높이가 N인 포화 이진 트리가 하나 있다. 즉 노드는 모두 2N+1−1개이고, 깊이 N인 리프 노드는 2N개다.
길이가 N인 이진수 X로 트리를 따라 내려간다. X의 가장 왼쪽 비트부터 차례대로 보면서 비트가 0이면 왼쪽 자식으로, 1이면 오른쪽 자식으로 내려간다. 예를 들어 N=2일 때 X=0=002이면 가장 왼쪽 리프 노드까지 내려가고, X=3=112이면 가장 오른쪽 리프 노드까지 내려간다. X=2=102이면 루트에서 오른쪽 자식으로 내려간 다음 왼쪽 자식으로 내려간다.
가장 처음에 X=0이고, 루트만 방문한 상태다. 다음 두 쿼리를 처리하는 프로그램을 작성하시오.
1 C: X를 (X+2C)mod2N으로 바꾼다. 그 다음 바뀐 X로 루트에서부터 내려가면서 지나가는 노드를 모두 방문한다. 루트와 도착한 리프 노드도 방문한 노드에 포함된다.
2: 지금까지 방문한 서로 다른 노드의 개수를 출력한다. 같은 노드를 여러 번 방문해도 한 번만 센다.