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

Задача . C. Генная инженерия


«Многомерные пространства нынче не в моде, а вот генные алгоритмы — очень даже», — подумал физик Воль и переквалифицировался в биоинформатика. Исследуя любезно предоставленные ему результаты секвенирования, он столкнулся со следующей задачей, касающейся цепочек ДНК. Далее мы будем считать, что цепочка ДНК — это произвольная строка, состоящая из заглавных букв «A», «C», «G» и «T» (разумеется, это упрощенная интерпретация).

Пусть есть длинная цепочка ДНК w и набор s1, s2, ..., sm коротких цепочек. Будем говорить, что набор фильтрует w, если цепочками набора можно покрыть w. Естественно, подстроки для разных позиций могут пересекаться между собой и даже накрывать друг друга. Формально это условие означает следующее: пусть строка w имеет длину |w|, ее символы пронумерованы от 1 до |w|, и для каждой позиции i в строке w найдется такая пара индексов l, r (1 ≤ l ≤ i ≤ r ≤ |w|), что подстрока w[l ... r] является элементом набора s1, s2, ..., sm.

Воль заметил, что цепочек фиксированной длины, фильтрующихся конкретным набором, может быть очень много, и как посчитать их количество — не знает. Помогите физику! Ваша задача — для заданной длины n и набора {si} найти количество различных цепочек ДНК длины n, фильтрующихся данных набором.

Ответ может быть очень большим, поэтому выведите его по модулю 1000000009.

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

Первая строка содержит два целых числа n и m (1 ≤ n ≤ 1000, 1 ≤ m ≤ 10) — длина искомых цепочек и количество строк в наборе соответственно.

В каждой из следующих m строк содержится соответствующая цепочка из набора si, задаваемая непустой строкой длины не больше 10, состоящей из заглавных букв «A», «C», «G», «T». Среди заданного набора строк могут быть одинаковые.

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

Выведите единственное целое число: ответ по модулю 1000000009 (109 + 9).

Примечание

В первом примере строка должна фильтроваться символом «A». Ясно, что такая строка единственна: «AA».

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


Примеры
Входные данныеВыходные данные
1 2 1
A
1
2 6 2
CAT
TACT
2

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

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