만드는 중입니다

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

무당벌레

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

요약
시작 칸 (I, 1)에서 각 행의 출구로 빠져나가는 경로 수를 셉니다. 두 경로는 방문한 칸 집합과 열별 첫 방문 행이 같으면 같은 경로로 봅니다.
난이도

어려움10점 중 9점

유형
동적 계획법, 행렬, 비트 연산
정답자
아직 제출이 없습니다

문제

Albert는 무당벌레의 길 찾기 능력을 연구한다. 실험을 위해 격자 모양의 미로를 만들고, 무당벌레가 어떤 칸들을 거쳐 미로를 탈출하는지 조사한다. 미로는 RR행 C+1C+1열, 총 R×(C+1)R \times (C+1)개의 칸으로 이루어진다. 그중 NN개의 칸에는 장애물이 설치되어 있어서 무당벌레가 방문하거나 지나갈 수 없다. 편의상 ii번째 장애물은 xix_i행 yiy_i열에 있다고 하자. 또한 (r,c)(r, c)는 rr행 cc열의 칸을 뜻한다.

Albert는 무당벌레를 II행 1열의 칸에 풀어 놓는다. 무당벌레는 다음 규칙에 따라 이동한다.

  • r>1r > 1인 (r,c)(r, c) 칸에서는 (r−1,c)(r-1, c) 칸으로 위쪽 이동할 수 있다. r=1r = 1이면 위쪽이 막혀 있어 이동할 수 없다.
  • r<Rr < R인 (r,c)(r, c) 칸에서는 (r+1,c)(r+1, c) 칸으로 아래쪽 이동할 수 있다. r=Rr = R이면 아래쪽이 막혀 있어 이동할 수 없다.
  • (r,c)(r, c) 칸에서는 (r,c+1)(r, c+1) 칸으로 오른쪽 이동할 수 있다. c=Cc = C이면, 즉 CC열에서 C+1C+1열로 이동하면 미로를 탈출한 것으로 보고 실험을 마친다.
  • 요컨대 마지막 열에서 탈출하는 경우를 빼면 위, 아래, 오른쪽으로 자유롭게 움직일 수 있고 왼쪽으로는 움직일 수 없다.

아래 그림은 R=3R = 3, C=2C = 2, N=2N = 2, x=[3,3]x = [3, 3], y=[1,2]y = [1, 2], I=1I = 1인 경우를 보여준다. "x"로 표시된 두 칸에는 장애물이 있고, 무당벌레는 (I,1)=(1,1)(I, 1) = (1, 1) 칸에서 출발한다. CC열에서 오른쪽으로 이동해 탈출하면 그림의 "#"로 표시된 칸 중 하나에 도달한다. 편의상 무당벌레가 cc열에 처음 도달한 행 번호를 FcF_c라고 하자. 항상 F1=IF_1 = I이다.

아래 그림은 무당벌레가 (1,3)(1, 3) 칸에 도달하며 탈출한 경로 중 세 가지를 보여준다. 편의상 무당벌레가 지나친 네 개의 칸을 A, B, C, D로 표시했다.

  • 경로 1: A -> B -> D -> C -> 탈출. 이때 F=[1,2,1]F = [1, 2, 1]이다.
  • 경로 2: A -> B -> A -> B -> D -> C -> D -> C -> 탈출. 이때 F=[1,2,1]F = [1, 2, 1]이다.
  • 경로 3: A -> B -> A -> B -> A -> C -> D -> C -> 탈출. 이때 F=[1,1,1]F = [1, 1, 1]이다.

Albert의 실험 장치는 무당벌레가 방문한 칸과 각 열에서 처음 방문한 칸은 기록할 수 있다. 하지만 같은 칸을 몇 번 방문했는지, 칸을 어떤 순서로 방문했는지는 측정하지 못한다. 그래서 위의 세 경로 중 경로 1과 경로 2는 구분할 수 없다. 두 경로 모두 A, B, C, D 네 칸을 방문했고 FF 값도 같기 때문이다. 경로 3은 방문한 칸은 같지만 F2F_2 값이 달라서 다른 두 경로와 구분된다.

위 미로에서 무당벌레가 탈출하는 방법은 실험 장치가 구분할 수 있는 기준으로 아래 그림과 같이 9가지다. 그림에서 "x"는 장애물, "*"는 해당 열에서 무당벌레가 처음 방문한 칸을 뜻한다. 각 탈출 방법에서 방문한 칸의 집합을 SS라고 하자.

  • 위쪽 줄, 왼쪽부터 순서대로
    • S={(1,1),(1,2),(1,3)}S = \{ (1, 1), (1, 2), (1, 3) \}, F=[1,1,1]F = [1, 1, 1]. 예를 들어 (1, 1) -> (1, 2) -> (1, 3) 순으로 이동하여 탈출한다.
    • S={(1,1),(1,2),(2,2),(1,3)}S = \{ (1, 1), (1, 2), (2, 2), (1, 3) \}, F=[1,1,1]F = [1, 1, 1]. 예를 들어 (1, 1) -> (1, 2) -> (2, 2) -> (1, 2) -> (1, 3) 순으로 이동하여 탈출한다.
    • S={(1,1),(2,1),(1,2),(1,3)}S = \{ (1, 1), (2, 1), (1, 2), (1, 3) \}, F=[1,1,1]F = [1, 1, 1]. 예를 들어 (1, 1) -> (2, 1) -> (1, 1) -> (1, 2) -> (1, 3) 순으로 이동하여 탈출한다.
    • S={(1,1),(2,1),(1,2),(2,2),(1,3)}S = \{ (1, 1), (2, 1), (1, 2), (2, 2), (1, 3) \}, F=[1,1,1]F = [1, 1, 1]. 예를 들어 (1, 1) -> (2, 1) -> (1, 1) -> (1, 2) -> (2, 2) -> (1, 2) -> (1, 3) 순으로 이동하여 탈출한다.
    • S={(1,1),(2,1),(1,2),(2,2),(1,3)}S = \{ (1, 1), (2, 1), (1, 2), (2, 2), (1, 3) \}, F=[1,2,1]F = [1, 2, 1]. 예를 들어 (1, 1) -> (2, 1) -> (2, 2) -> (1, 2) -> (1, 3) 순으로 이동하여 탈출한다.
  • 아래쪽 줄, 왼쪽부터 순서대로
    • S={(1,1),(1,2),(2,2),(2,3)}S = \{ (1, 1), (1, 2), (2, 2), (2, 3) \}, F=[1,1,2]F = [1, 1, 2]. 예를 들어 (1, 1) -> (1, 2) -> (2, 2) -> (2, 3) 순으로 이동하여 탈출한다.
    • S={(1,1),(2,1),(2,2),(2,3)}S = \{ (1, 1), (2, 1), (2, 2), (2, 3) \}, F=[1,2,2]F = [1, 2, 2]. 예를 들어 (1, 1) -> (2, 1) -> (2, 2) -> (2, 3) 순으로 이동하여 탈출한다.
    • S={(1,1),(2,1),(1,2),(2,2),(2,3)}S = \{ (1, 1), (2, 1), (1, 2), (2, 2), (2, 3) \}, F=[1,1,2]F = [1, 1, 2]. 예를 들어 (1, 1) -> (2, 1) -> (1, 1) -> (1, 2) -> (2, 2) -> (2, 3) 순으로 이동하여 탈출한다.
    • S={(1,1),(2,1),(1,2),(2,2),(2,3)}S = \{ (1, 1), (2, 1), (1, 2), (2, 2), (2, 3) \}, F=[1,2,2]F = [1, 2, 2]. 예를 들어 (1, 1) -> (2, 1) -> (2, 2) -> (1, 2) -> (2, 2) -> (2, 3) 순으로 이동하여 탈출한다.

이 미로에서 무당벌레가 탈출하는 서로 다른 방법은 위의 9가지뿐이다.

Albert는 두 탈출 경로에서 방문한 칸의 집합 SS가 같고, 각 열에서 처음 방문한 칸 FF도 같으면 같은 탈출 방법으로 본다. 마지막에 어떤 칸을 통해 탈출했는지가 중요하므로, (r,C+1)(r, C+1) 칸에 도달하며 탈출하는 방법의 수를 ArA_r이라 하고 배열 AA를 구하려 한다. 위 미로의 경우 A=[5,4,0]A = [5, 4, 0]이다.

입력으로 RR, CC, NN, II와 배열 xx, yy가 주어질 때 A1,A2,…,ARA_1, A_2, \dots, A_R을 구하라.

입력

입력의 첫 줄에 테스트 케이스의 수 TT가 주어진다.

각 테스트 케이스의 첫 줄에는 RR, CC, NN, II가 공백으로 구분되어 주어진다. 다음 NN개의 줄에는 각 줄마다 정수 2개가 공백으로 구분되어 주어지며, ii번째 줄의 두 정수는 ii번째 장애물의 위치 xix_i, yiy_i이다.

출력

각 테스트 케이스의 정답 A1,A2,…,ARA_1, A_2, \dots, A_R을 공백으로 구분하여 한 줄에 출력한다. 값이 매우 클 수 있으므로 각 값을 109+710^9 + 7로 나눈 나머지를 출력한다.

제한

  • 1≤T≤301 \le T \le 30
  • 1≤R≤201 \le R \le 20
  • 1≤C≤1061 \le C \le 10^6
  • 1≤N≤2501 \le N \le 250
  • 1≤I≤R1 \le I \le R
  • 1≤i≤N1 \le i \le N인 모든 ii에 대하여
    • 1≤xi≤R1 \le x_i \le R
    • 1≤yi≤C1 \le y_i \le C
    • (xi,yi)≠(I,1)(x_i, y_i) \neq (I, 1) (무당벌레가 출발하는 칸에는 장애물이 없다)
    • (xi,yi)(x_i, y_i)는 서로 다르다

예제1

  1. 예제 1

    입력
    7
    3 3 2 2
    2 2
    3 3
    10 1 2 5
    3 1
    8 1
    10 2 2 5
    3 1
    8 1
    10 3 2 5
    3 1
    8 1
    5 5 3 3
    2 2
    3 3
    4 4
    3 2 2 1
    3 1
    3 2
    3 2 0 1
    
    예상 출력
    4 2 0
    0 0 0 3 6 4 2 0 0 0
    85 170 255 340 392 378 320 240 160 80
    13442 25949 36586 44418 48510 48290 43912 36014 25476 13178
    360 576 648 648 648
    5 4 0
    14 16 10