아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

Race for the Galaxy

시간 제한4초메모리 제한1024 MB

요약
격자에서 N명의 주자가 겹치지 않고 달리는 경로 수를 세며, 흙탕물 구간을 지나는 주자 수 k별로 개수를 구합니다.
난이도

어려움10점 중 9점

유형
동적 계획법, 조합론, 그래프
정답자
아직 제출이 없습니다

문제

혜아의 학교 운동장에는 가로선 RR개와 세로선 CC개로 이루어진 큰 격자가 그려져 있습니다. 위에서 rr번째 가로선과 왼쪽에서 cc번째 세로선이 만나는 교차점을 (r,c)(r, c)라고 합니다.

어제 비가 많이 와서 운동장에 여러 장애물이 생겼습니다.

  • SS번째 가로선과 S+1S+1번째 가로선 사이에 진흙밭이 생겨, 세로선 NN개에 해당하는 구간이 진흙으로 덮였습니다. 즉, 세로선 번호 t1,t2,⋯ ,tNt_1, t_2, \cdots, t_N마다 (S,ti)(S, t_i)와 (S+1,ti)(S+1, t_i)를 잇는 세로 구간에 진흙이 있습니다.
  • MM개의 물웅덩이가 생겼습니다. jj번째 물웅덩이는 (xj,yj)(x_j, y_j)에 있습니다.

혜아는 운동회에서 열릴 달리기 시합을 위해 NN명의 선수가 달릴 NN개의 경주로를 운동장에 그리려고 합니다. 운동회는 기록보다 화합을 위한 행사이므로, 경주에도 여러 규칙이 붙어 있습니다.

  • 경주의 목적은 첫 번째 가로선 위의 출발점에서 출발해 마지막 가로선 위의 도착점에 도착하는 것입니다. 각 선수의 출발점과 도착점은 정해져 있습니다. ii번째 선수는 (1,ai)(1, a_i)에서 출발해 (R,bi)(R, b_i)에 도착해야 합니다. 이때 a1<a2<⋯<aNa_1 < a_2 < \cdots < a_N이고 b1<b2<⋯<bNb_1 < b_2 < \cdots < b_N입니다.
  • 선수는 반드시 격자의 가로선과 세로선을 따라 달려야 합니다. 격자를 벗어나거나, 가로 또는 세로가 아닌 방향으로 움직이거나, 교차점이 아닌 곳에서 방향을 바꿀 수 없습니다.
  • 세로선을 따라 움직일 때는 반드시 아래 방향으로 움직여야 합니다.
  • 가로선을 따라 움직일 때, 홀수 번째 가로선이면 반드시 왼쪽으로, 짝수 번째 가로선이면 반드시 오른쪽으로 움직여야 합니다.
  • 물웅덩이가 있는 곳은 땅이 파여 있어 위험하므로, 어떤 선수의 경주로도 물웅덩이가 있는 교차점을 지나서는 안 됩니다.
  • 두 선수가 부딪히는 것도 위험하므로, 어떤 두 선수의 경주로도 같은 교차점을 공유해서는 안 됩니다.

규칙을 더 엄밀하게 적으면 다음과 같습니다.

  • ii번째 선수의 경주로는 (1,ai)(1, a_i)에서 시작해 (R,bi)(R, b_i)에서 끝나는, 서로 인접한 교차점의 수열입니다. (1≤i≤N1 \le i \le N) 두 교차점 (r1,c1)(r_1, c_1)과 (r2,c2)(r_2, c_2)가 인접한다는 것은 ∣r1−r2∣+∣c1−c2∣=1|r_1-r_2|+|c_1-c_2|=1을 만족한다는 뜻입니다.
  • 수열에 속한 모든 교차점 (r,c)(r, c)는 1≤r≤R1 \le r \le R, 1≤c≤C1 \le c \le C를 만족해야 합니다.
  • (xj,yj)(x_j, y_j)는 수열에 포함될 수 없습니다. (1≤j≤M1 \le j \le M)
  • 1<r≤R1 < r \le R, 1≤c≤C1 \le c \le C인 (r,c)(r, c)의 다음 원소가 (r−1,c)(r-1, c)이면 안 됩니다.
  • 1≤r≤R1 \le r \le R, 1≤c<C1 \le c < C인 r,cr, c에 대해, rr이 홀수이면 (r,c)(r, c)의 다음 원소가 (r,c+1)(r, c+1)이면 안 됩니다. rr이 짝수이면 (r,c+1)(r, c+1)의 다음 원소가 (r,c)(r, c)이면 안 됩니다.
  • 한 교차점은 최대 하나의 수열에만 포함됩니다.

위 규칙을 만족하며 경주로를 그리는 모든 방법 중, kk명의 선수가 진흙으로 덮인 구간을 지나게 되는 경우의 수를 k=0,1,⋯ ,Nk = 0, 1, \cdots, N에 대해 구해 주세요. 수가 매우 클 수 있으니 소수 1 000 000 0071\,000\,000\,007(=109+7=10^9+7)로 나눈 나머지를 출력해 주세요.

  • ii번째 선수가 진흙으로 덮인 구간을 지난다는 것은, 어떤 1≤j≤N1 \le j \le N에 대해 수열에 (S,tj)(S, t_j)와 (S+1,tj)(S+1, t_j)가 연달아 존재한다는 뜻입니다.

입력

첫 줄에 RR, CC, NN, MM, SS가 공백으로 구분되어 주어집니다. (3≤R,C≤3003 \le R, C \le 300; 3≤N≤C3 \le N \le C; 0≤M≤3000 \le M \le 300; 1≤S<R1 \le S < R)

둘째 줄에 a1,a2,⋯ ,aNa_1, a_2, \cdots, a_N이 공백으로 구분되어 주어집니다. (1≤a1<a2<⋯<aN≤C1 \le a_1 < a_2 < \cdots < a_N \le C)

셋째 줄에 b1,b2,⋯ ,bNb_1, b_2, \cdots, b_N이 공백으로 구분되어 주어집니다. (1≤b1<b2<⋯<bN≤C1 \le b_1 < b_2 < \cdots < b_N \le C)

넷째 줄에 t1,t2,⋯ ,tNt_1, t_2, \cdots, t_N이 공백으로 구분되어 주어집니다. (1≤t1<t2<⋯<tN≤C1 \le t_1 < t_2 < \cdots < t_N \le C)

M>0M > 0인 경우, 다음 MM개의 줄 각각에 xjx_j와 yjy_j가 공백으로 구분되어 주어집니다. (1<xj<R1 < x_j < R; 1≤yj≤C1 \le y_j \le C)

주어지는 모든 물웅덩이의 위치는 서로 다릅니다.

출력

첫 줄에 N+1N+1개의 정수를 공백으로 구분하여 출력합니다. (k+1)(k+1)번째 정수는 kk명의 선수가 진흙으로 덮인 구간을 지나게 되는 경우의 수를 1 000 000 0071\,000\,000\,007(=109+7=10^9+7)로 나눈 나머지입니다. (0≤k≤N0 \le k \le N)

예제2

  1. 예제 1

    입력
    7 5 3 3 4
    1 3 5
    1 3 5
    1 3 4
    2 2
    2 5
    6 4
    
    예상 출력
    0 4 6 0
    
  2. 예제 2

    입력
    14 6 3 0 7
    1 2 3
    1 2 3
    4 5 6
    
    예상 출력
    108900 1439077 95378 1