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

Задача . Pair Programming


Задача

Темы:
Программа состоит из последовательности инструкций, каждая из которых имеет одну из следующих форм:

  1. \(\times d\), где \(d\) это цифра в интервале \([0,9]\)
  2. \(+s\), где \(s\) это строка, обозначающая имя переменной. В программе все переменные различны.

Результат выполнения программы определяется как выражение - результат выполнения всех инструкций в порядке ввода , начиная с \(0\). Например, результаты выполнения программы \([\times 3,+x,+y,\times 2,+z]\) есть выражение \((0\times 3+x+y)\times 2+z=2\times x+2\times y+z\). При выполнении различные программы могут формировать одни и те же выражения. Например, исполнение программы \([+w,\times 0,+y,+x,\times 2,+z, \times 1]\) также в результате даёт выражение \(2\times x+2\times y+z\).

У Беси и Эльзы есть по программе из \(N\) (\(1\le N\le 2000\)) инструкций. Они объединяют инструкции этих программ, чтобы получить новую программу длиной \(2N\). Заметим, что всего имеется \(\frac{(2N)!}{N!\times N!}\) способов объединить программы, но но не все из этих программ дадут различные результаты.

Вычислите количество различных выражений, которые могут быть получены исполнением объединённых программ Беси и Эльзы по модулю \(10^9+7\).

Каждый ввод состоит из \(T\) (\(1\le T\le 10\)) тестов, которые требуется решать независимо. Гарантируется, что сумма \(N\) во всех \(T\) тестах не превысит \(2000\).

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка ввода содержит \(T\), количество тестов.

Первая строка каждого теста содержит число \(N\).

Вторая строка каждого теста содержит программу Беси, представленную строкой длины \(N\). Каждый символ или цифра \(d\in [0,9]\), представляющая инструкцию типа 1, или символ \(+\), представляющий инструкцию типа 2.

Третья строка каждого теста содержит программу Эльзы, в том же формате как и у Беси.

Внутри теста, имена переменных среди всех инструкций различны. Заметим, что реальные имена не вводятся, поскольку они не влияют на результат.

ФОРМАТ ВЫВОДА (НА ЭКРАН / stdout):

Количество различных выражений, которые могут быть произведены исполнением перемешанных программ Беси и Эльзы по модулю \(10^9+7\).


Примеры
Входные данныеВыходные данные
1 4
1
0
1
3
12+
+02
3
0++
++9
4
5+++
+6+1
1
3
9
9

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

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