#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 1e3;
string s, sq;
int z1[maxn + 10], z2[maxn + 10], pref[1010], suff[1010], rez;
void calc(string ss, int z[]) {
  int l = -1;
  int r = -1;
  for (int i = 1; i < ss.size(); i++) {
    if (i > r) {
      l = i;
      r = l - 1;
      while (r + 1 < ss.size() && ss[r + 1] == ss[r + 1 - l]) r++;
      z[i] = r - l + 1;
    } else {
      if (i + z[i - l] - 1 < r)
        z[i] = z[i - l];
      else {
        l = i;
        while (r + 1 < ss.size() && ss[r + 1] == ss[r + 1 - l]) r++;
        z[i] = r - l + 1;
      }
    }
  }
}
int main() {
  cin >> s;
  int q;
  scanf("%d", &q);
  for (int qi = 1; qi <= q; qi++) {
    cin >> sq;
    if (sq.size() == 1) continue;
    string pom = sq + '$' + s;
    calc(pom, z1);
    reverse(s.begin(), s.end());
    reverse(sq.begin(), sq.end());
    pom = sq + '$' + s;
    calc(pom, z2);
    reverse(s.begin(), s.end());
    for (int i = 0; i < s.size(); i++) z1[i] = z1[i + sq.size() + 1];
    for (int i = 0; i < pom.size() / 2; i++)
      swap(z2[i], z2[pom.size() - 1 - i]);
    fill(pref, pref + 1001, 1000000000);
    fill(suff, suff + 1001, -1);
    int e = 0;
    for (int i = 0; i < s.size(); i++) {
      int id = z1[i];
      if (id == sq.size()) {
        rez++;
        e = 1;
        break;
      }
      if (pref[id] == 1000000000) pref[id] = i;
      id = z2[i];
      if (id == sq.size()) {
        rez++;
        e = 1;
        break;
      }
      suff[id] = i;
    }
    for (int i = sq.size() - 1; i >= 1; i--) {
      pref[i] = min(pref[i], pref[i + 1]);
      suff[i] = max(suff[i], suff[i + 1]);
    }
    if (e == 1) continue;
    for (int i = 1; i < sq.size(); i++) {
      if (pref[i] == -1 || suff[sq.size() - i] == -1) continue;
      if (pref[i] + i - 1 < suff[sq.size() - i] - (sq.size() - i) + 1) {
        rez++;
        break;
      }
    }
  }
  printf("%d\n", rez);
  return 0;
}
