AT_wupc2019_h Doki Doki Programming Clubs!
Description
[problemUrl]: https://atcoder.jp/contests/wupc2019/tasks/wupc2019_h
W大学ではサークル活動が盛んで、 \\(N\\) 個の競技プログラミングサークルがあります。 サークル \\(i\\ (0 \\leq i \\leq N-1)\\) の部員の人数は \\(K\_i\\) であり、その \\(j\\ (0 \\leq j \\leq K\_i-1)\\) 番目の部員のレートは \\(A\_{i,j}\\) です。
毎日、どのサークルがパソコン室を使うかで言い争いになり、サークル同士は競技プログラミング対決で決着をつけます。対決はそれぞれのサークルの部員が順番に1対1の勝負を行いますが、人数が少ない方のサークルの部員は多い方の人数に合わせて、対決が終わるまでローテーションします。
サークル \\(X\\) とサークル \\(Y\\) の対決の「白熱度」は対決する部員のレートの積の総和で表されます。式で表すと、以下のようになります。
- 数列\\(A\_X,A\_Y\\)について、\\(0 \\leq j \\leq \\max(K\_X,K\_Y)-1\\)における\\(\\sum{(A\_{X,\\ {j \\mod K\_X}} \\times A\_{Y,\\ {j \\mod K\_Y}})}\\)の値
今、対決が \\(Q\\) 回行われ、\\(i\\ (0 \\leq i \\leq Q-1)\\) 番目の対決はサークル \\(X\_i\\) とサークル \\(Y\_i\\) の対決でした。それぞれの対決について、「白熱度」を求めてください。ただし、答えは非常に大きくなることがあるので、\\(10^9+7\\)で割ったあまりを答えること。
Input Format
入力は以下の形式で標準入力から与えられる。
```
\(N\)
\(K_0\ A_{0,0}\ A_{0,1}\ \dots\ A_{0,K_0-1}\)
\(K_1\ A_{1,0}\ A_{1,1}\ \dots\ A_{1,K_1-1}\)
\(\vdots\)
\(K_{N-1}\ A_{{N-1},0}\ A_{{N-1},1}\ \dots\ A_{{N-1},K_{N-1}-1}\)
\(Q\)
\(X_0\ Y_0\)
\(X_1\ Y_1\)
\(\vdots\)
\(X_{Q-1}\ Y_{Q-1}\)
```
Output Format
それぞれのクエリに対して答えを\\(10^9+7\\)で割ったあまりを出力してください。
Explanation/Hint
### 制約
- \\(2 \\leq N \\leq 200000\\)
- \\(1 \\leq K\_i\\)
- \\(\\sum K\_i \\leq 200000\\)
- \\(1 \\leq A\_{i,j} \\leq 10^9\\)
- \\(1 \\leq Q \\leq 200000\\)
- \\(0 \\leq X\_i, Y\_i \\leq N-1\\)
- \\(X\_i \\neq Y\_i\\)
- 入力される値はすべて整数である。
### Sample Explanation 1
例えば、二つ目のクエリに対しては、数列\\\\(A\\\_0,A\\\_2\\\\)に注目し\\\\(K\\\_0=1,K\\\_2=3\\\\)より答えは\\\\(A\\\_{0,0} \\\\times A\\\_{2,0}+A\\\_{0,0} \\\\times A\\\_{2,1}+A\\\_{0,0} \\\\times A\\\_{2,2}=70\\\\)となります。 三つ目のクエリに対しては、数列\\\\(A\\\_1,A\\\_2\\\\)に注目し\\\\(K\\\_1=2,K\\\_2=3\\\\)より答えは\\\\(A\\\_{1,0} \\\\times A\\\_{2,0}+A\\\_{1,1} \\\\times A\\\_{2,1}+A\\\_{1,0} \\\\times A\\\_{2,2}=53\\\\)となります。
### Sample Explanation 2
\\\\(10^9+7\\\\)で割ったあまりを出力してください。