¿La página no carga? Prueba haciendo clic aquí.
Placeholder

#8772
Subtarea

삼항 연산자 2 1s 1024MB

Problemas

삼항 연산자는

(condition) ? (value_if_true) : (value_if_false)

와 같이 생긴 연산자로, condition이 참일 경우 value_if_true로 평가되고 아닐 경우 value_if_false로 평가된다.

또한, 삼항 연산자 안에 또 삼항 연산자를 쓸 수 있다. 다시 말해 conditionvalue에도 삼항 연산자가 들어갈 수 있다.

만약, 삼항 연산자로만 이루어진 표현식에서 괄호를 뺀다면 표현식을 여러 방법으로 해석할 수 있다. 예를 들어 b?i:n?g:o

((b)?(i):(n)) ? (g) : (o)   또는   (b) ? (i) : ((n)?(g):(o))

로 해석할 수 있다.

괄호가 없는 삼항 연산자로만 구성된 표현식이 주어지면 해당 식을 몇 가지 방법으로 해석할 수 있는지 구하는 프로그램을 작성하여라.

구체적으로 정의하자면,

<expr> ::= (<expr>)?(<expr>):(<expr>) | <variable>
<variable> ::= a | b | c | ... | z

위의 BNF(Backus–Naur form)에서 <expr>로 나타낼 수 있는 문자열 중에서 괄호를 제거하고 비교하였을 때 입력받은 표현식과 같은 문자열이 되는 경우의 수를 구해야 한다.

경우의 수가 너무 클 수 있으므로, 이 수를 소수인 1\, 000\, 000\, 007(=10^9+7)로 나눈 나머지를 계산하여라.


Entrada

첫 번째 줄에 알파벳 소문자, ?:만으로 이루어진 문자열 S가 주어진다.

주어진 문자열은 적어도 하나 이상의 유효한 식으로 해석될 수 있다.


Salida

경우의 수를 1\, 000\, 000\, 007로 나눈 나머지를 출력한다.


Subtarea

# Puntaje Condición
#116

S의 길이는 5 이상 450 이하이다.

#237

S의 길이는 5 이상 4\,500 이하이다.

#347

S의 길이는 5 이상 300\,000 이하이다.


Ejemplo #1

a?a?a:a:a
1

Ejemplo #2

b?i:n?g:o
2

Fuente

UCPC 2022 예선 H

Debes iniciar sesión para escribir código.