Скобки

Input file:  BRACKET.IN    
Output file: BRACKET.OUT    Time limit: 0.2 sec.

В некоторых языках программирования приходится ставить очень много скобок. Часто бывает трудно сосчитать, сколько скобок открыто и сколько закрыто. Чтобы упростить запись, кроме круглых скобок “(“ и “)”, используется правая квадратная скобка “]”. Правая квадратная скобка закрывает все открытые на данный момент скобки, если такие имеются (если открытых скобок не имеется, то выражение считается ошибочным). 
Правильным скобочным выражением назовем строку символов, получающуюся из правильного выражения после вычеркивания из него всех символов, кроме скобок “(“, “)” и “]”.
Например, правильными скобочными  выражениями являются (()(()(()](), ((((((], (())(). А вот примеры неправильных скобочных выражений: ())((((] – ошибка в третьем  символе, (())] – квадратной скобке нечего закрывать, ((])) – скобка, идущая вслед за квадратной, не имеет открывающей пары.
Пустая строка является правильным скобочным выражением.

Напишите программу, которая для данной строки символов, состоящей только из символов “(“, “)” и “]”, определяет, сколько имеется способов вычеркнуть некоторое количество (возможно, и 0) символов так, чтобы оставшиеся символы образовывали правильное скобочное выражение. Число может получиться рчень большим, поэтому выводить следует только остаток от деления этого числа на 20102010.

Входные данные. В единственной строке входных данных находится не менее одного и не более 1000 символов “(“, “)” или “]”. 

Выходные данные. В единственной строке выходных данных должно находиться одно целое неотрицательное число – остаток от деления на 20102010 количества способов вычеркнуть символы в данной строке так, чтобы получить правильное скобочное выражение.

Примеры	
BRACKET.IN	BRACKET.OUT	
()()	5	

BRACKET.IN	BRACKET.OUT	
)])]	1	

BRACKET.IN	BRACKET.OUT	
(())]	11