Bob은 n가지 다른 종류의 사탕을 여럿 가지고 있다. 사탕은 1번부터 n번까지 번호가 붙어있고 i번 사탕은 v_i개 갖고 있으며, m=∑_1≤i≤nv_i 를 사탕의 총 개수라 하자.
Bob은 오늘 자신이 가진 사탕 모두를 다 먹기로 했다. 단, 언제나 그렇듯 놀이를 하면서 먹기로 했다.
- 우선 같은 종류의 사탕을 연속해서 먹지 않기로 했다. 아무래도 골고루 먹는 편이 더 맛있을 것 같기 때문이다.
- 만약 위 조건을 만족하며 사탕을 먹을 수 있는 방법이 여럿 있다면, 사전순으로 가장 앞서는 방법으로 사탕을 먹기로 했다. 총 m개의 사탕을 먹는 방법은 길이가 m인 정수 배열로 표현 가능하며, 이 때 각 원소의 값은 사탕의 번호를 나타낸다. 이를테면 두 가지 방법 X와 Y가 있을 때, 편의상 X와 Y가 상기한대로 길이 m인 정수 배열이라 하자. X와 Y의 원소가 처음으로 다른 지점을 k라 하면 (즉, 1≤i<k에 대해서는 X\[i]=Y\[i] 이지만 X\[k]=Y\[k] 인 경우), X\[k]<Y\[k] 이면 방법 X가 방법 Y보다 사전순으로 앞서고 X\[k]>Y\[k] 이면 Y가 X보다 앞선다. 이 때, 두 정수 X\[k] 와 Y\[k]는 대소비교를 하기에 예를 들어, X\[k]=10 이고 Y\[k]=5인 경우 X\[k]>Y\[k] 이다.
예를 들어 n=2, v=\[2,2]라 하자. 이 때, 1번 조건을 만족하며 사탕을 모두 먹는 방법은 총 2가지가 있다.
- 방법 1: \[1,2,1,2]
- 방법 2: \[2,1,2,1]
이 두 가지 방법 중 방법 1이 사전순으로 앞선다.
다른 예로, n=3, v=\[2,1,4]라 하자. 이 때, 1번 조건을 만족하며 사탕을 모두 먹는 방법은 총 3가지가 있다 (사전순으로 정렬되어있다).
- 방법 1: \[3,1,3,1,3,2,3]
- 방법 2: \[3,1,3,2,3,1,3]
- 방법 3: \[3,2,3,1,3,1,3]
입력으로 n과 v_i 값들이 주어졌을 때, Bob이 위 조건을 만족하며 모든 사탕을 다 먹을 수 있는지 알아보자. 만약 가능하다면, 그 중 사전순으로 가장 앞서는 방법을 나타내는 길이 m인 정수 배열을 Z라 했을 때, ∑_1≤i≤m(i⋅Z\[i]) 값을 구해보자 단, 이 값이 너무 커질 수 있으므로 987,654,323로 나눈 나머지를 출력한다.