이상적인 울타리
시간 제한1초메모리 제한1024 MB
각 총 길이 X(0 이상 S 이하)마다, 한 줄기를 v 높이에서 자르면 그보다 높은 인접 줄기도 v에서 잘려야 하는 규칙을 지키는 자르기 방법의 수를 구합니다.
문제
정원에 개의 줄기로 이루어진 울타리가 있다. 이 줄기는 식물인 아이비이며 Puljka가 아니다. 번째 줄기의 높이는 이고, 모든 줄기 높이의 합은 이다.
울타리를 다듬기 위해 Malnar 씨는 정한 높이에서 줄기를 자른다. 줄기는 쉽게 부러지므로 각 줄기는 최대 한 번만 자를 수 있다. Malnar 씨는 가위질에 능숙하지 않아서, 줄기 하나를 높이 에서 자르면 이웃한 줄기 중 높이가 보다 엄격히 큰 줄기도 같은 높이 에서 잘라야 한다. 모든 줄기를 자를 필요는 없다. 가위를 잊고 왔다면 한 줄기도 자르지 않는다.

그림 I.1 왼쪽은 올바른 자르기이고 오른쪽은 잘못된 자르기이다. 2번째와 3번째 열 사이, 4번째와 5번째 열 사이에서 자르는 것은 허용되지 않는다.
부터 까지의 길이 마다, Malnar 씨는 울타리를 잘라서 전체 길이가 가 되는 방법이 몇 가지인지 알고 싶어 한다. 어떤 줄기의 높이라도 다르면 서로 다른 울타리이다. 정확한 개수 대신 으로 나눈 나머지를 구한다.
입력
첫 줄에 줄기의 수 ()이 주어진다. 둘째 줄에는 개의 정수가 주어지며, 번째 수는 번째 줄기의 높이 ()이다. 모든 높이의 합 는 이하이다.
출력
개의 줄을 출력한다. 번째 줄에는 전체 높이의 합이 인 울타리의 가능한 개수를 으로 나눈 나머지를 출력한다.
힌트
첫 번째 예제에서 전체 길이가 인 울타리는 만들 수 없다. 3번째 줄기를 높이 에서 자르면 4번째 줄기도 높이 에서 잘라야 하고, 반대로 4번째 줄기를 자르면 3번째 줄기도 잘라야 하기 때문이다. 전체 길이가 부터 까지인 각 경우에는 정확히 한 가지 방법이 있다. 길이 부터 까지는 4번째 열을 잘라서 만들고, 길이 은 아무것도 자르지 않아서 만든다. 전체 길이가 인 울타리는 모든 줄기를 높이 에서 자르면 만들어진다.