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

Задача . G1. Хорошие подстроки


Задача

Темы: Строки хэши *1700

Умный Бобер недавно увлекся новой игрой в слова. Ее суть состоит в следующем: подсчитать количество различных хороших подстрок некоторой строки 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.

Примечание

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

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


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

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

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