숫자 이어 붙이기

아직 제출이 없습니다시간 제한1초메모리 제한512 MB

문제

철수는 수를 이어 붙이는 놀이를 좋아한다. 1과 2를 이어 붙이면 12가 되고, 17과 13을 이어 붙이면 1713이 된다. 100과 1000을 이어 붙이면 1001000이 된다. 1과 2를 이어 붙이되, 순서를 반대로 해서 2와 1을 이어 붙이면, 21이 된다. 같은 두 수를 이어 붙이더라도, 이어 붙이는 순서에 따라서 값이 달라진다는 것을 알 수 있다.

철수가 살고 있는 마을에는 집이 여러 채 있고, 각 집에는 11부터 NN까지 번호가 붙어있다. 두 집 사이에 존재하는 도로를 통해 서로 이동할 수 있다. 총 N1N-1개의 도로가 존재한다. ii번째 도로는 a_ia\_i번 집과 b_ib\_i집을 잇는다. 집과 도로는 트리의 형태를 이룬다. 즉, 어떤 집에서 시작해서 몇 개의 도로를 거쳐 어떤 집이라도 갈 수 있고, 같은 집을 두 번 방문하지 않을 경우 그 경로는 유일하다.

각각의 집의 대문에는 수가 쓰여있다. 철수는 총 QQ번 수를 이어 붙이는 놀이를 할 것이다. ii번째 놀이에서는 x_ix\_i번째 집에서 시작해서, y_iy\_i번째 집까지 이동하면서, 이동하는 경로 상에 있는 집들의 대문에 쓰여있는 수들을 방문하는 순서대로 이어 붙일 것이다. 만약 x_i=y_ix\_i = y\_i라면, x_ix\_i번째 집의 대문에 쓰인 수가 답이 될 것이다. 철수는 놀이가 끝날 때마다, 자기가 올바르게 수들을 이어 붙였는지 궁금해졌다. 철수를 위해, ii번째 놀이가 끝났을 때 이어 붙인 수의 값을 구해주자. 단, 수가 너무 커질 수 있으니까, 1,000,000,0071\\,000\\,000\\,007로 나눈 나머지를 출력하도록 하자.

입력

첫 번째 줄에는 집의 개수 NN과, 철수가 놀이를 할 횟수 QQ가 주어진다.

두 번째 줄에는 NN개의 집의 대문에 쓰여 있는 수 A_iA\_i가 공백을 사이에 두고 순서대로 주어진다.

세 번째 줄부터 N+1N+1번째 줄까지는, 도로의 정보가 주어진다. 2+i2+i번째 줄에는 ii번째 도로가 잇는 두 집의 번호 a_i,b_ia\_i, b\_i에 대한 정보가 공백을 사이에 두고 주어진다.

N+2N+2번째 줄부터 N+Q+1N+Q+1번째 줄까지는 놀이에 대한 정보가 주어진다. N+i+1N+i+1번째 줄에는 ii번째 놀이를 시작할 집의 번호 x_ix\_i와, 끝낼 집의 번호 y_iy\_i가 공백을 사이에 두고 주어진다.

출력

첫 번째 줄부터 QQ번째 줄에 걸쳐, ii번째 줄에는 ii번째 놀이의 결과를 1,000,000,0071\\,000\\,000\\,007로 나눈 나머지를 출력한다.

제한

  • 2N1,0002\leq N \leq 1\\,000
  • 1Q1,0001\leq Q \leq 1\\,000
  • 1A_i1,000,000,0001 \leq A\_i \leq 1\\,000\\,000\\,000 (1iN1 \leq i \leq N)
  • 1a_i,b_iN1 \leq a\_i, b\_i \leq N
  • 1x_i,y_iN1 \leq x\_i, y\_i \leq N