#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 300;
set<string> myst;
string s, p[MAX_N], g;
int l[MAX_N], r[MAX_N];
int n, m;
void init() {
  cin >> s >> n;
  for (int i = 1; i <= n; i++) cin >> p[i] >> l[i] >> r[i];
}
long long sub(string d, string g) {
  bool temp = true;
  int cnt = 0;
  if (g.size() > d.size()) return 0;
  for (int i = 0; i <= (d.length() - g.length()); i++) {
    temp = true;
    for (int j = 0; j < g.size(); j++) {
      if (i + j >= d.size()) {
        temp = false;
        break;
      } else if (d[i + j] != g[j]) {
        temp = false;
        break;
      }
    }
    if (temp) {
      cnt++;
      temp = true;
    }
  }
  return cnt;
}
bool CH(string g) {
  for (int i = 1; i <= n; i++) {
    int add = sub(p[i], g);
    if (add > r[i] || add < l[i]) return false;
  }
  return true;
}
int main() {
  init();
  for (int len = s.size(); len > 0; len--)
    for (int st = 0; st <= s.size() - len; st++) {
      g = s.substr(st, len);
      if (CH(g)) myst.insert(g);
    }
  cout << myst.size() << endl;
  return 0;
}
