#include <bits/stdc++.h>   using namespace std;   char str[200], pat[20][200];   map<pair<int, int>, int> H[20];   set<pair<int, int> > st;   int a[20], b[20];   int N;   int main() {     int i, j, k, h, len, ans, cnt;     scanf( %s , str);     scanf( %d , &N);     for (i = 0; i < N; i++) scanf( %s%d%d , &pat[i], &a[i], &b[i]);     for (i = 0; i < N; i++) {       len = strlen(pat[i]);       for (j = 0; j < len; j++) {         h = 0;         for (k = j; k < len; k++) {           h = h * 129 + pat[i][k];           if (!H[i].count(pair<int, int>(h, k - j + 1)))             H[i][pair<int, int>(h, k - j + 1)] = 0;           H[i][pair<int, int>(h, k - j + 1)]++;         }       }     }     ans = 0;     len = strlen(str);     for (i = 0; i < len; i++) {       h = 0;       for (j = i; j < len; j++) {         h = h * 129 + str[j];         if (st.find(pair<int, int>(h, j - i + 1)) != st.end()) continue;         st.insert(pair<int, int>(h, j - i + 1));         for (k = 0; k < N; k++) {           if (!H[k].count(pair<int, int>(h, j - i + 1)))             cnt = 0;           else             cnt = H[k][pair<int, int>(h, j - i + 1)];           if (cnt < a[k] || cnt > b[k]) break;         }         if (k == N) ans++;       }     }     printf( %d n , ans);     return 0;   }   