Олимпиадный тренинг

Задача . D. Раскрашивание скобок


Задача

Темы: дп *1900

Как-то раз Петя прочитал задачу про скобочную последовательность. Он долго думал над ней, но так и не нашел решение. Сегодня с этой задачей предстоит столкнуться вам.

Дана строка s, представляющая собой правильную скобочную последовательность. Правильная скобочная последовательность — это последовательность открывающихся («(») и закрывающихся («)») скобок такая, что из нее можно получить корректное математическое выражение, вставляя между скобок числа и операторы. Например, последовательности «(())()» и «()» правильные скобочные, а последовательности «)()» и «(()» нет.

В правильной скобочной последовательности каждой скобке соответствует парная скобка (открывающейся скобке соответствует парная закрывающаяся и наоборот). Например, в скобочной последовательности, изображенной на рисунке, третьей скобке соответствует парная шестая, а пятой скобке соответствует четвертая.

Вам разрешается раскрасить некоторые скобки в скобочной последовательности, так чтобы выполнялись все три условия:

  • Каждая скобка либо не раскрашена, либо раскрашена в красный цвет, либо раскрашена в синий цвет.
  • Для любых двух парных скобок раскрашена ровно одна скобка из этой пары. Другими словами, для каждой скобки верно следующее: раскрашена либо она сама, либо соответствующая парная к ней.
  • Никакие две соседние раскрашенные скобки не имеют один и тот же цвет.

Найдите количество различных раскрасок скобочной последовательности удовлетворяющих описанным выше условиям. Две раскраски считаются различными, если они отличаются цветом хотя бы одной скобки. Так как ответ может быть достаточно большим, выведите его по модулю 1000000007 (109 + 7).

Входные данные

В первой строке содержится единственная строка s (2 ≤ |s| ≤ 700), представляющая собой правильную скобочную последовательность.

Выходные данные

Выведите единственное число — количество раскрасок скобочной последовательности удовлетворяющих описанным выше условиям по модулю 1000000007 (109 + 7).

Примечание

Рассмотрим первый тестовый пример. Скобочную последовательность из этого примера можно раскрасить, например, как показано на двух рисунках ниже.

Две раскраски, показанные ниже, являются некорректными.


Примеры
Входные данныеВыходные данные
1 (())
12
2 (()())
40
3 ()
4

time 2000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w645
Комментарий учителя