Race for the Galaxy
시간 제한4초메모리 제한1024 MB
격자에서 N명의 주자가 겹치지 않고 달리는 경로 수를 세며, 흙탕물 구간을 지나는 주자 수 k별로 개수를 구합니다.
문제
혜아의 학교 운동장에는 가로선 개와 세로선 개로 이루어진 큰 격자가 그려져 있습니다. 위에서 번째 가로선과 왼쪽에서 번째 세로선이 만나는 교차점을 라고 합니다.
어제 비가 많이 와서 운동장에 여러 장애물이 생겼습니다.
- 번째 가로선과 번째 가로선 사이에 진흙밭이 생겨, 세로선 개에 해당하는 구간이 진흙으로 덮였습니다. 즉, 세로선 번호 마다 와 를 잇는 세로 구간에 진흙이 있습니다.
- 개의 물웅덩이가 생겼습니다. 번째 물웅덩이는 에 있습니다.
혜아는 운동회에서 열릴 달리기 시합을 위해 명의 선수가 달릴 개의 경주로를 운동장에 그리려고 합니다. 운동회는 기록보다 화합을 위한 행사이므로, 경주에도 여러 규칙이 붙어 있습니다.
- 경주의 목적은 첫 번째 가로선 위의 출발점에서 출발해 마지막 가로선 위의 도착점에 도착하는 것입니다. 각 선수의 출발점과 도착점은 정해져 있습니다. 번째 선수는 에서 출발해 에 도착해야 합니다. 이때 이고 입니다.
- 선수는 반드시 격자의 가로선과 세로선을 따라 달려야 합니다. 격자를 벗어나거나, 가로 또는 세로가 아닌 방향으로 움직이거나, 교차점이 아닌 곳에서 방향을 바꿀 수 없습니다.
- 세로선을 따라 움직일 때는 반드시 아래 방향으로 움직여야 합니다.
- 가로선을 따라 움직일 때, 홀수 번째 가로선이면 반드시 왼쪽으로, 짝수 번째 가로선이면 반드시 오른쪽으로 움직여야 합니다.
- 물웅덩이가 있는 곳은 땅이 파여 있어 위험하므로, 어떤 선수의 경주로도 물웅덩이가 있는 교차점을 지나서는 안 됩니다.
- 두 선수가 부딪히는 것도 위험하므로, 어떤 두 선수의 경주로도 같은 교차점을 공유해서는 안 됩니다.
규칙을 더 엄밀하게 적으면 다음과 같습니다.
- 번째 선수의 경주로는 에서 시작해 에서 끝나는, 서로 인접한 교차점의 수열입니다. () 두 교차점 과 가 인접한다는 것은 을 만족한다는 뜻입니다.
- 수열에 속한 모든 교차점 는 , 를 만족해야 합니다.
- 는 수열에 포함될 수 없습니다. ()
- , 인 의 다음 원소가 이면 안 됩니다.
- , 인 에 대해, 이 홀수이면 의 다음 원소가 이면 안 됩니다. 이 짝수이면 의 다음 원소가 이면 안 됩니다.
- 한 교차점은 최대 하나의 수열에만 포함됩니다.
위 규칙을 만족하며 경주로를 그리는 모든 방법 중, 명의 선수가 진흙으로 덮인 구간을 지나게 되는 경우의 수를 에 대해 구해 주세요. 수가 매우 클 수 있으니 소수 ()로 나눈 나머지를 출력해 주세요.
- 번째 선수가 진흙으로 덮인 구간을 지난다는 것은, 어떤 에 대해 수열에 와 가 연달아 존재한다는 뜻입니다.
입력
첫 줄에 , , , , 가 공백으로 구분되어 주어집니다. (; ; ; )
둘째 줄에 이 공백으로 구분되어 주어집니다. ()
셋째 줄에 이 공백으로 구분되어 주어집니다. ()
넷째 줄에 이 공백으로 구분되어 주어집니다. ()
인 경우, 다음 개의 줄 각각에 와 가 공백으로 구분되어 주어집니다. (; )
주어지는 모든 물웅덩이의 위치는 서로 다릅니다.
출력
첫 줄에 개의 정수를 공백으로 구분하여 출력합니다. 번째 정수는 명의 선수가 진흙으로 덮인 구간을 지나게 되는 경우의 수를 ()로 나눈 나머지입니다. ()