전구 끄는 순서

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

문제

매일 아침 첫 햇살이 비치면 이반은 마을 가로등의 전구를 모두 꺼야 한다. 마을에는 곧게 뻗은 도로가 하나뿐이고, 가로등은 도로 한쪽에만 서 있다. 가로등에는 왼쪽부터 오른쪽으로 1번부터 NN번까지 번호가 붙어 있다.

이반은 날마다 시작 가로등 pp를 하나 정해서 그 전구를 먼저 끈다. 그다음부터는 전기를 아끼려고 다음 규칙을 따른다. 매 단계에서 아직 켜져 있는 전구 가운데 왼쪽으로 가장 가까운 것과 오른쪽으로 가장 가까운 것을 보고, 전력이 더 큰 쪽을 끈다. 왼쪽에 켜진 전구가 없으면 오른쪽으로 가장 가까운 전구를 끄고, 오른쪽에 켜진 전구가 없으면 왼쪽으로 가장 가까운 전구를 끈다. 두 전구의 전력이 같으면 이반은 둘 중 아무거나 골라서 끌 수 있다. 그래서 시작 위치가 같아도 전구를 끄는 순서는 여러 가지가 나올 수 있다.

시작 위치가 pp일 때 서로 다른 순서의 개수를 M(p)M(p)라고 하자. 주어진 시작 위치 KK개에 대해 각각 M(Pi)M(P_i)109+710^9 + 7로 나눈 나머지를 구하는 프로그램을 작성하라.

입력

첫째 줄에 가로등의 개수 NN과 시작 위치의 개수 KK가 공백을 사이에 두고 주어진다.

둘째 줄에 전구의 전력 A1,A2,,ANA_1, A_2, \dots, A_N이 공백을 사이에 두고 주어진다.

셋째 줄에 궁금한 시작 위치 P1,P2,,PKP_1, P_2, \dots, P_K가 공백을 사이에 두고 주어진다. 같은 위치가 여러 번 주어질 수 있다.

출력

KK개의 줄을 출력한다. ii번째 줄에는 M(Pi)M(P_i)109+710^9 + 7로 나눈 나머지를 출력한다.

제한

  • 1N1000001 \le N \le 100\,000
  • 1K1000001 \le K \le 100\,000
  • 1Ai2000001 \le A_i \le 200\,000
  • 1PiN1 \le P_i \le N

힌트

전력이 3,5,1,4,33, 5, 1, 4, 3인 가로등 다섯 개를 생각하자. 이반이 3번에서 시작하면 3번을 꺼서 (3,5,×,4,3)(3, 5, \times, 4, 3)이 된다. 왼쪽 전구의 전력이 더 크므로 2번을 끄면 (3,×,×,4,3)(3, \times, \times, 4, 3)이 된다. 이제 오른쪽 전구의 전력이 더 크므로 4번을 끄면 (3,×,×,×,3)(3, \times, \times, \times, 3)이 된다. 남은 1번과 5번은 전력이 같아서 어느 쪽을 먼저 꺼도 되므로 순서가 두 가지로 갈린다.

같은 가로등에서 5번부터 시작하면 오른쪽에 켜진 전구가 한 번도 없어서 오른쪽에서 왼쪽으로 차례대로 끄는 순서 하나뿐이다.