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

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

괄호 넣기

시간 제한1초메모리 제한128 MB

요약
주어진 부호를 가진 식과 값이 같아지도록, 모두 빼기로 이어진 식에 괄호를 완전히 치는 경우의 수를 1e9로 나눈 나머지로 구한다.
난이도

보통10점 중 7점

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

문제

뺄셈은 결합법칙을 만족하지 않는다. 예를 들어 (5−2)−1=2(5-2)-1 = 2 이지만 5−(2−1)=45-(2-1) = 4 이므로 (5−2)−1≠5−(2−1)(5-2)-1 \neq 5-(2-1) 이다. 즉 5−2−15-2-1 과 같은 식의 값은 뺄셈을 수행하는 순서에 따라 달라진다. 괄호가 없으면 연산을 왼쪽에서 오른쪽 순서로 계산하므로, 5−2−15-2-1 은 (5−2)−1(5-2)-1 을 뜻한다.

다음과 같은 형태의 식이 주어진다.

x1±x2±⋯±xn,x_1 \pm x_2 \pm \cdots \pm x_n,

여기서 각 ±\pm 는 ++ (더하기) 또는 −- (빼기) 중 하나이고, x1,x2,…,xnx_1, x_2, \ldots, x_n 은 서로 다른 변수이다.

모두 빼기로만 이루어진 식

x1−x2−⋯−xnx_1 - x_2 - \cdots - x_n

에 괄호를 넣어, 주어진 식과 동치인 식을 만들고자 한다. 예를 들어

x1−x2−x3+x4+x5−x6+x7x_1 - x_2 - x_3 + x_4 + x_5 - x_6 + x_7

과 동치인 식을 얻으려면, x1−x2−x3−x4−x5−x6−x7x_1 - x_2 - x_3 - x_4 - x_5 - x_6 - x_7 에 다음과 같이 괄호를 넣으면 된다.

(((x1−x2)−((x3−x4)−x5))−(x6−x7)).(((x_1 - x_2) - ((x_3 - x_4) - x_5)) - (x_6 - x_7)).

우리는 완전하고 올바르게 괄호가 쳐진 식만 고려한다. 어떤 식이 완전하고 올바르게 괄호가 쳐졌다는 것은 다음 중 하나임을 의미한다.

  • 하나의 변수이거나,
  • (w1−w2)(w_1 - w_2) 꼴이며, 이때 w1w_1 과 w2w_2 가 각각 완전하고 올바르게 괄호가 쳐진 식인 경우.

()(), (xi)(x_i), ((⋯ ))((\cdots)) 처럼 불필요한 괄호가 있는 식은 허용하지 않는다. 또한 x1−(x2−x3)x_1 - (x_2 - x_3) 은 가장 바깥쪽 괄호가 없으므로 완전하게 괄호가 쳐진 식이 아니다.

주어진 식을 읽고, x1−x2−⋯−xnx_1 - x_2 - \cdots - x_n 에 n−1n-1 쌍의 괄호를 넣어 뺄셈의 순서가 완전히 정해지면서 그 결과가 주어진 식과 동치가 되도록 하는 서로 다른 방법의 수를 1,000,000,0001{,}000{,}000{,}000 으로 나눈 나머지로 구하는 프로그램을 작성하라.

입력

첫째 줄에 변수의 개수를 나타내는 정수 nn 이 주어진다 (2≤n≤50002 \le n \le 5000). 다음 n−1n-1 개의 줄에는 각각 문자 ++ 또는 −- 가 하나씩 주어진다. 이 중 ii 번째 줄의 문자는 주어진 식에서 xix_i 와 xi+1x_{i+1} 사이에 있는 연산자이다.

출력

x1−x2−⋯−xnx_1 - x_2 - \cdots - x_n 에 n−1n-1 쌍의 괄호를 넣어 뺄셈의 순서가 완전히 정해지면서 그 결과가 주어진 식과 동치가 되도록 하는 서로 다른 방법의 수를 1,000,000,0001{,}000{,}000{,}000 으로 나눈 나머지를 한 줄에 정수 하나로 출력한다.

예제3

  1. 예제 1

    입력
    7
    -
    -
    +
    +
    -
    +
    
    예상 출력
    3
    
  2. 예제 2

    입력
    2
    -
    
    예상 출력
    1
    
  3. 예제 3

    입력
    2
    +
    
    예상 출력
    0