괄호 넣기
시간 제한1초메모리 제한128 MB
주어진 부호를 가진 식과 값이 같아지도록, 모두 빼기로 이어진 식에 괄호를 완전히 치는 경우의 수를 1e9로 나눈 나머지로 구한다.
문제
뺄셈은 결합법칙을 만족하지 않는다. 예를 들어 이지만 이므로 이다. 즉 과 같은 식의 값은 뺄셈을 수행하는 순서에 따라 달라진다. 괄호가 없으면 연산을 왼쪽에서 오른쪽 순서로 계산하므로, 은 을 뜻한다.
다음과 같은 형태의 식이 주어진다.
여기서 각 는 (더하기) 또는 (빼기) 중 하나이고, 은 서로 다른 변수이다.
모두 빼기로만 이루어진 식
에 괄호를 넣어, 주어진 식과 동치인 식을 만들고자 한다. 예를 들어
과 동치인 식을 얻으려면, 에 다음과 같이 괄호를 넣으면 된다.
우리는 완전하고 올바르게 괄호가 쳐진 식만 고려한다. 어떤 식이 완전하고 올바르게 괄호가 쳐졌다는 것은 다음 중 하나임을 의미한다.
- 하나의 변수이거나,
- 꼴이며, 이때 과 가 각각 완전하고 올바르게 괄호가 쳐진 식인 경우.
, , 처럼 불필요한 괄호가 있는 식은 허용하지 않는다. 또한 은 가장 바깥쪽 괄호가 없으므로 완전하게 괄호가 쳐진 식이 아니다.
주어진 식을 읽고, 에 쌍의 괄호를 넣어 뺄셈의 순서가 완전히 정해지면서 그 결과가 주어진 식과 동치가 되도록 하는 서로 다른 방법의 수를 으로 나눈 나머지로 구하는 프로그램을 작성하라.
입력
첫째 줄에 변수의 개수를 나타내는 정수 이 주어진다 (). 다음 개의 줄에는 각각 문자 또는 가 하나씩 주어진다. 이 중 번째 줄의 문자는 주어진 식에서 와 사이에 있는 연산자이다.
출력
에 쌍의 괄호를 넣어 뺄셈의 순서가 완전히 정해지면서 그 결과가 주어진 식과 동치가 되도록 하는 서로 다른 방법의 수를 으로 나눈 나머지를 한 줄에 정수 하나로 출력한다.