만드는 중입니다

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

기관총

시간 제한2초메모리 제한512 MB

요약
오른쪽을 향한 각도 영역 안에 들어오는 적들을 찾아 그 번호를 정렬한 뒤 다항식 해시 값으로 점수를 계산하는 문제로, 질의가 온라인으로 주어지고 전체 명중 수의 합이 제한된다.
난이도

어려움10점 중 8점

유형
기하, 정렬, 이분 탐색, 구현
정답자
아직 제출이 없습니다

문제

Fulanito는 오래된 아케이드 게임을 하러 갔다. 이 게임에서 그는 자신의 기지 안 임의의 위치에 기관총을 설치할 수 있는데, 기지는 좌표가 정수이고 x<0x < 0인 모든 점 (x,y)(x, y)로 이루어져 있다. 전장에는 NN명의 적이 있다. ii번째 적(1≤i≤N1 \le i \le N)은 xi>0x_i > 0인 위치 (xi,yi)(x_i, y_i)에 있다. 모든 위치는 미리 주어진다.

(xm,ym)(x_m, y_m)에 설치된 기관총은 직선 y=ymy = y_m을 중심으로 오른쪽을 향하는 시야각을 가지며, 그 경계는 직선 y=ym±(x−xm)/2y = y_m \pm (x - x_m)/2로 주어진다. 설치되면 이 각도로 둘러싸인 영역 안의 모든 적을 타격하며, 경계선 위에 있는 적도 포함한다.

그림 1: 예제 입력의 그림 표현

이 게임의 점수 체계는 쓸데없이 복잡하다. 많은 이들은 이 체계가 개발자들의 큰 실수였다고 생각한다(개발자들은 이에 대해 “버그가 아니라 기능이다!”라고 단호히 주장한다). 구체적으로, 기관총을 어떤 위치에 두었을 때 얻는 점수는 다음 단계로 계산한다:

  • 기관총이 타격하는 모든 적의 인덱스(1≤i≤N1 \le i \le N)를 나열한다.
  • 인덱스를 오름차순으로 정렬하고, 정렬된 값을 i0<i1<⋯<ik−1i_0 < i_1 < \cdots < i_{k-1}이라 한다.
  • (∑j=0k−1ij⋅5782344j) mod (109+7)(\sum_{j=0}^{k-1} i_j \cdot 5782344^j) \bmod (10^9 + 7) 공식으로 점수를 계산한다. 여기서 a mod ba \bmod b는 aa를 bb로 나눈 나머지를 뜻한다.
  • 참고: 적을 하나도 타격하지 못한 기관총의 점수는 정확히 0이다.

이 게임을 더 잘하기 위해 Fulanito는 QQ개의 질문을 한다. 각 질문은 기관총을 특정 위치 (xm,ym)(x_m, y_m)에 두었을 때 얻을 점수를 묻는다. 문제를 더 어렵게 만들기 위해 (xm,ym)(x_m, y_m) 값은 직접 주어지지 않는다. 대신 aa와 bb가 주어지고, 다음 공식으로 xmx_m과 ymy_m을 계산한다: xm=−1−(p+a) mod (109+7)x_m = -1 - (p + a) \bmod (10^9 + 7)이고 ym=(p+b) mod (109+7)y_m = (p + b) \bmod (10^9 + 7). 여기서 pp는 이전 질문의 답이며, 첫 질문을 처리할 때는 p=0p = 0이다.

참고: 모든 질문에서 타격한 적의 수의 합은 최대 10610^6임이 보장된다.

입력

입력은 여러 줄로 이루어진다. 첫째 줄에는 적의 수와 질문의 수를 나타내는 두 정수 N,QN, Q(1≤N,Q≤1051 \le N, Q \le 10^5)가 주어진다.

다음 NN개 줄에는 각각 두 정수 xix_i와 yiy_i(1≤xi,yi≤1091 \le x_i, y_i \le 10^9)가 주어지며, 이는 ii번째 적의 위치 좌표이다.

다음 QQ개 줄에는 각각 두 정수 aa와 bb(0≤a,b<109+70 \le a, b < 10^9 + 7)가 주어지며, 이는 문제 설명에서 설명한 대로 각 질문을 지정한다.

출력

각 질문마다 질문의 답을 담은 정수를 한 줄에 하나씩 출력한다.

예제1

  1. 예제 1

    입력
    7 2
    2 8
    5 7
    1 6
    4 5
    1 3
    2 2
    4 1
    2 3
    373785639 373785644
    
    예상 출력
    626214369
    981053491