頁面無法載入?點擊這裡可能會修復。
Placeholder

#10406

숨겨진 팬케이크 30s 1024MB

問題

\mathbf{N}장의 팬케이크를 굽는다. 반지름이 1센티미터(cm)인 팬케이크를 하나, 반지름이 2cm인 팬케이크를 하나, 반지름이 3cm인 팬케이크를 하나, ..., 반지름이 \mathbf{N}cm인 팬케이크를 하나 굽는데, 굽는 순서는 임의일 수 있다. 첫 번째 팬케이크를 구운 뒤에는 접시에 올려 둔다. 그 다음부터는 팬케이크를 하나 구울 때마다, 바로 직전에 만든 팬케이크 위에 중심을 맞춰 포개어 올린다. 이때 새로 올린 팬케이크는 올리는 순간에는 위에서 보인다. 어떤 팬케이크가 가려져 보이지 않게 되는 것은, 나중에 더 큰 반지름의 팬케이크를 위에 올렸을 때뿐이다.

예를 들어 4장의 팬케이크를 굽는다고 하자. 먼저 반지름이 3cm인 팬케이크를 굽는데, 이는 보인다. 그 다음 반지름이 1cm인 팬케이크를 구워 위에 올리면 둘 다 보인다. 세 번째로 반지름이 2cm인 팬케이크를 구워 올리면, 이는 바로 아래의 팬케이크(반지름 1)를 가리지만 첫 번째 팬케이크(반지름 3)는 가리지 못하므로 총 2장이 보이는 상태가 된다. 마지막으로 반지름이 4cm인 팬케이크를 구워 올리면 다른 모든 팬케이크를 가려서 1장만 보이게 된다. 아래 그림은 각 팬케이크를 구운 뒤의 스택 상태를 보여준다. 각 스택에서 완전히 색칠된 팬케이크는 보이는 것이고, 반투명한 팬케이크는 보이지 않는 것이다.

Four stacks with pancakes of radii 3, 3 and 1, 3, 1 and 2, and 3, 1, 2 and 4.

스택에 정확히 i장의 팬케이크가 있을 때 위에서 보이는 팬케이크의 수를 \mathbf{V_i}라고 하자. 위 예시에서는 \mathbf{V_1} = 1, \mathbf{V_2} = 2, \mathbf{V_3} = 2, \mathbf{V_4} = 1이다.

\mathbf{V_1}, \mathbf{V_2}, \dots, \mathbf{V_N}이 주어질 때, 가능한 \mathbf{N}!개의 굽는 순서 중에서 이 값들을 만들어내는 순서는 몇 개인가? 출력 값이 매우 커질 수 있으므로, 결과를 소수 10^9+7(1000000007)로 나눈 나머지만 출력하라.


輸入

입력의 첫 줄에는 테스트 케이스 수 \mathbf{T}가 주어진다. \mathbf{T}개의 테스트 케이스가 이어지며, 각 테스트 케이스는 2줄로 설명된다. 각 테스트 케이스의 첫 줄에는 정수 \mathbf{N}이 주어지며, 이는 굽는 팬케이크의 개수이다. 둘째 줄에는 \mathbf{N}개의 정수 \mathbf{V_1}, \mathbf{V_2}, ..., \mathbf{V_N}이 주어진다. 이는 각각 팬케이크를 1장, 2장, ..., \mathbf{N}장 구운 뒤에 위에서 보이는 팬케이크의 수를 의미한다.


輸出

각 테스트 케이스마다 Case #x: y 형식의 한 줄을 출력하라. 여기서 x는 (1부터 시작하는) 테스트 케이스 번호이고, y는 매 단계에서의 보이는 팬케이크 수가 주어진 값들과 같아지도록 하는 \mathbf{N}장의 팬케이크 굽기 순서의 개수를 소수 10^9+7(1000000007)로 나눈 나머지이다.


範例 #1

3
4
1 2 2 1
3
1 1 2
3
1 1 3
Case #1: 1
Case #2: 2
Case #3: 0
테스트 세트 2의 샘플 케이스에서 주어진 \mathbf{V_i}들을 만드는 조리 순서는 316234143225가지다. 이를 10^9+7로 나눈 나머지는 234141013이다.

範例 #2

1
24
1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2
Case #1: 234141013

來源

GCJ 2021r2 C

需要登入才能撰寫程式碼。