만드는 중입니다

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

거대한 나무

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

요약
층 번호 세 개가 주어질 때, 각 질의마다 두 플레이어가 최적으로 칠한 뒤의 점수 차이를 10^9+7로 나눈 나머지로 구합니다.
난이도

어려움10점 중 10점

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

문제

바이타자르는 여자친구 알고리나에게 크리스마스 선물로 거대한 나무를 주었다. 이 나무는 식물이 아니라 사이클이 없는 연결 그래프이다. 나무는 매우 크지만 정리된 구조를 가진다.

나무의 정점은 nn개의 층에 놓여 있다. 첫 번째 층에는 정점이 하나뿐이며, 이것이 뿌리이다. 각 정점은 바로 다음 층에만 자식을 가진다. 마지막 층의 정점들은 잎이다. 모든 i∈[1,n−1]i \in [1, n-1]에 대해 ii번째 층의 각 정점은 aia_i개의 자식을 가진다.

알고리나는 선물이 얼마나 마음에 드는지 보여 주려고 바이타자르와 게임을 하기로 했다. 알고리나는 나무에서 정점 AA를 골랐고, 바이타자르는 정점 BB를 골랐다. BB는 AA와 같을 수도 있다. 알고리나부터 시작해서 두 사람이 번갈아 정점을 칠한다. 알고리나는 빨간색으로, 바이타자르는 파란색으로 칠한다. 게임을 시작할 때 모든 정점은 흰색이다. 각 정점은 알고리나 또는 바이타자르가 정확히 한 번만 칠한다. 차례인 사람은 흰색 정점이라면 AA와 BB를 포함해 아무 정점이나 자기 색으로 칠할 수 있다.

모든 정점이 칠해지면 두 사람은 점수를 계산한다. 알고리나의 점수 SAS_A는 빨간 정점 각각과 AA 사이 거리의 합이다. 바이타자르의 점수 SBS_B는 파란 정점 각각과 BB 사이 거리의 합이다. 두 정점 사이의 거리는 두 정점을 잇는 가장 짧은 경로의 간선 수이다. 알고리나는 SA−SBS_A - S_B를 최대로 만들고, 바이타자르는 이를 최소로 만들려고 한다.

바이타자르는 이것이 유한한 완전정보 게임이며, 두 사람이 최선을 다하면 최종 차이를 계산할 수 있다는 것을 금방 알아챘다. 값이 매우 클 수 있으므로 109+710^9 + 7로 나눈 나머지만 구하면 된다.

선물을 한 판만 하고 잊어버리기는 아쉬우니, 가능한 AA와 BB의 여러 선택마다 최종 점수 차이를 구해야 한다.

입력

첫 줄에는 정수 nn과 qq가 주어진다 (2≤n≤3000002 \le n \le 300000, 1≤q≤3000001 \le q \le 300000). 각각 층의 수와 AA, BB를 고르는 경우의 수이다.

둘째 줄에는 정수 a1,a2,…,an−1a_1, a_2, \ldots, a_{n-1}이 주어진다 (2≤ai≤3000002 \le a_i \le 300000).

이후 qq개의 줄에는 각 경우가 주어진다. 정점 자체가 아니라 층 번호만 주어지며, AA가 있는 층 WAW_A, BB가 있는 층 WBW_B, AA와 BB의 최소 공통 조상이 있는 층 WLCA(A,B)W_{LCA(A,B)} 세 값이다 (1≤WLCA(A,B)≤WA,WB≤n1 \le W_{LCA(A,B)} \le W_A, W_B \le n). 최종 결과는 이 세 값에만 의존한다.

출력

qq개의 줄을 출력한다. ii번째 줄에는 ii번째 경우의 최종 점수 차이를 109+710^9 + 7로 나눈 값을 쓴다.

힌트

이 나무는 3개 층으로 이루어져 있으며, 첫 번째 층에 정점 1개, 두 번째 층에 3개, 세 번째 층에 6개가 있다.

두 번째 경우에는 알고리나와 바이타자르가 모두 뿌리를 골랐다. 최적의 진행에서 두 사람은 층 번호가 커지지 않는 순서로 정점을 고른다. 결과는 (2+2+2+1+1)−(2+2+2+1+0)=1(2+2+2+1+1)-(2+2+2+1+0)=1이다.

세 번째 경우의 결과는 −4-4이다. 출력해야 하는 값은 −4 mod (109+7)=109+3-4 \bmod (10^9+7) = 10^9+3이다.

예제1

  1. 예제 1

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