누적 프뤼퍼 코드

깊이 k인 완전 이진 트리의 프뤼퍼 코드에서 a, a+d, ..., a+(m-1)d 위치의 값을 m개 더하는 질의 q개에 답한다.

어려움8수학트리분할 정복구현아직 제출이 없습니다시간 제한7초메모리 제한512 MB

문제

트리는 노드 nn개와 무방향 간선 n1n-1개로 이루어진 그래프로, 어떤 두 노드든 정확히 하나의 경로로 이어진다. 라벨 트리에서는 각 노드에 11부터 nn까지의 서로 다른 정수가 라벨로 붙는다.

라벨 트리의 프뤼퍼 코드는 노드가 두 개만 남을 때까지 노드를 하나씩 지우면서 만드는 수열이다. 매 단계에서 라벨이 가장 작은 잎을 지우고, 그 잎의 유일한 이웃의 라벨을 코드 끝에 덧붙인다. 잎은 이웃이 정확히 하나인 노드다. 따라서 라벨 트리의 프뤼퍼 코드는 길이가 n2n-2인 정수 수열이고, 이 코드에서 원래 트리를 복원할 수 있다.

깊이가 kk인 완전 이진 트리 CkC_k는 노드가 2k12^k - 1개인 라벨 트리로, j<2k1j < 2^{k-1}인 모든 jj에 대해 노드 jj가 노드 2j2j, 2j+12j+1과 이어져 있다. CkC_k의 프뤼퍼 코드를 p1,p2,,p2k3p_1, p_2, \ldots, p_{2^k-3}이라고 하자.

CkC_k의 프뤼퍼 코드는 매우 길어질 수 있으므로 코드 자체를 출력하지는 않는다. 대신 코드의 일부 원소의 합을 묻는 질문 qq개에 답해야 한다. 각 질문은 정수 aa, dd, mm 세 개로 이루어지고, 답은 pa+pa+d+pa+2d++pa+(m1)dp_a + p_{a+d} + p_{a+2d} + \cdots + p_{a+(m-1)d}이다.

입력

첫째 줄에 완전 이진 트리의 깊이 kk와 질문의 개수 qq가 주어진다 (2k302 \le k \le 30, 1q3001 \le q \le 300). 다음 qq개 줄에는 줄마다 질문 하나가 양의 정수 aja_j, djd_j, mjm_j 세 개로 주어진다. aja_j, djd_j, aj+(mj1)dja_j + (m_j - 1)d_j는 모두 2k32^k - 3 이하다.

출력

qq개 줄을 출력한다. jj번째 줄에는 jj번째 질문의 답을 정수 하나로 출력한다.

힌트

C3C_3의 프뤼퍼 코드를 만들 때 노드는 4, 5, 2, 1, 6 순서로 지워진다. 따라서 C3C_3의 프뤼퍼 코드는 2, 2, 1, 3, 3이다.