#include <bits/stdc++.h>
using namespace std;
const int MAXS = 1005, MAXM = 105, MAXN = 1e5 + 10;
int nxt[MAXS][30], n, m, ans, dpl[MAXN], dpr[MAXN];
string tmp;
string s;
void bnxt(string &a) {
  fill_n(nxt[0], 30, 0);
  nxt[0][a[0] - 'A'] = 1;
  int cp = 0;
  for (int i = 1; i <= a.size(); i++) {
    for (char j = 'A'; j <= 'Z'; j++) {
      if (a[cp] == j)
        nxt[i][j - 'A'] = cp + 1;
      else
        nxt[i][j - 'A'] = nxt[cp][j - 'A'];
    }
    if (i < a.size()) {
      nxt[i][a[i] - 'A'] = i + 1;
      if (a[cp] == a[i])
        cp++;
      else
        cp = nxt[cp][a[i] - 'A'];
    }
  }
}
int main() {
  cin >> s >> m;
  n = s.size();
  for (int o = 0; o < m; o++) {
    bool fn = false;
    cin >> tmp;
    if (tmp.size() == 1) continue;
    fill_n(dpl, MAXN, 0);
    fill_n(dpr, MAXN, 0);
    bnxt(tmp);
    int cp = 0;
    for (int i = 0; i < n; i++) {
      cp = nxt[cp][s[i] - 'A'];
      if (cp == tmp.size()) {
        fn = 1;
        break;
      }
      dpl[i] = cp;
    }
    reverse(tmp.begin(), tmp.end());
    bnxt(tmp);
    cp = 0;
    for (int i = n - 1; i >= 0; i--) {
      cp = nxt[cp][s[i] - 'A'];
      if (cp == tmp.size()) {
        fn = 1;
        break;
      }
      dpr[i] = cp;
      dpr[i] = max(dpr[i], dpr[i + 1]);
    }
    for (int i = 0; i < n; i++)
      if (dpl[i] + dpr[i + 1] >= tmp.size()) {
        fn = 1;
        break;
      }
    ans += fn;
  }
  cout << ans;
}
