#include <bits/stdc++.h>
using namespace std;
template <class T>
inline T __in() {
  T v;
  cin >> v;
  return v;
}
void koro(string &s, set<long long> &ase) {
  for (__typeof(((int)s.size())) i = 0; i < (((int)s.size())); i++) {
    long long tot = 0;
    for (int j = i; j < ((int)s.size()); j++) {
      tot *= 27;
      tot += s[j];
      ase.insert(tot);
    }
  }
}
void koro(string &s, map<long long, int> &ase) {
  for (__typeof(((int)s.size())) i = 0; i < (((int)s.size())); i++) {
    long long tot = 0;
    for (int j = i; j < ((int)s.size()); j++) {
      tot *= 27;
      tot += s[j];
      ase[tot]++;
    }
  }
}
string p[20];
int l[20], r[20];
map<long long, int> sub[20];
int main() {
  ios_base::sync_with_stdio(0);
  string s;
  set<long long> ase;
  cin >> s;
  koro(s, ase);
  int n = __in<int>();
  for (__typeof(n) i = 0; i < (n); i++) {
    cin >> p[i] >> l[i] >> r[i];
    koro(p[i], sub[i]);
  }
  long long ans = 0;
  for (__typeof((ase).begin()) it = (ase).begin(); it != (ase).end(); it++) {
    int ok = 1;
    for (__typeof(n) i = 0; i < (n); i++) {
      int oc = sub[i][*it];
      if (l[i] <= oc && oc <= r[i]) continue;
      ok = 0;
      break;
    }
    ans += ok;
  }
  cout << ans << endl;
  return 0;
}
