Если вы используете C++, пожалуйста, выберите в качестве компилятора при отправке решения: C++14 (GCC 6-32) или C++17 (GCC 7-32). ×

G1. Хорошие подстроки
ограничение по времени на тест
4 секунды
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Умный Бобер недавно увлекся новой игрой в слова. Ее суть состоит в следующем: подсчитать количество различных хороших подстрок некоторой строки s. Для определения того, является ли строка хорошей, в игре используются правила. Их всего n штук. Каждое правило описывается тройкой (p, l, r), где p — строка, а l и r (l ≤ r) — целые числа. Будем говорить, что строка t удовлетворяет правилу (p, l, r), если количество вхождений строки t в строку p лежит в пределах от l до r включительно. Например, строка «ab», удовлетворяет правилам («ab», 1, 2) и («aab», 0, 1), но не удовлетворяет правилам («cd», 1, 2) и («abab», 0, 1).

Подстрокой s[l... r] (1 ≤ l ≤ r ≤ |s|) строки s = s1s2... s|s| (где |s| — длина строки s) называется строка slsl + 1... sr.

Будем считать, что количество вхождений строки t в строку p — это количество пар целых чисел l, r (1 ≤ l ≤ r ≤ |p|) таких, что p[l... r] = t.

Будем говорить, что строка t является хорошей, если она удовлетворяет всем n правилам. Умный Бобер просит вас помочь ему в написании программы, которая будет вычислять количество различных хороших подстрок строки s. Две подстроки s[x... y] и s[z... w] считаются различными, если s[x... y] ≠ s[z... w].

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

Первая строка содержит строку s. Вторая строка содержит целое число n. Следующие n строк содержат правила по одному в строке. Каждая из этих строк содержит строку и два целых числа pi, li, ri, разделенные единичными пробелами (0 ≤ li ≤ ri ≤ |pi|). Гарантируется, что все заданные строки непустые и содержат только строчные латинские буквы.

Ограничения на входные данные для получения 30 баллов (подзадача G1):

  • 0 ≤ n ≤ 10.
  • Длина строки s и максимальная длина строки p  ≤ 200.

Ограничения на входные данные для получения 70 баллов (подзадачи G1+G2):

  • 0 ≤ n ≤ 10.
  • Длина строки s и максимальная длина строки p  ≤ 2000.

Ограничения на входные данные для получения 100 баллов (подзадачи G1+G2+G3):

  • 0 ≤ n ≤ 10.
  • Длина строки s и максимальная длина строки p  ≤ 50000.
Выходные данные

Выведите ровно одно целое число — количество различных хороших подстрок строки s.

Примеры
Входные данные
aaab
2
aa 0 0
aab 1 1
Выходные данные
3
Входные данные
ltntlnen
3
n 0 0
ttlneenl 1 4
lelllt 1 1
Выходные данные
2
Входные данные
a
0
Выходные данные
1
Примечание

В первом тестовом примере подходят подстроки «aab», «ab» и «b».

Во втором тестовом примере «e» и «t».