#include <bits/stdc++.h>
using namespace std;
const int inf = (int)(1e+9);
string s, rs, p, rp, t;
int f, n, m, l, L, R, pref[1003], suf[1003], z[101005], ans;
string reverse_(string a) {
  int l2 = a.size();
  for (int i = 0; i < l2 / 2; i++) swap(a[i], a[l2 - i - 1]);
  return a;
}
int main() {
  cin >> s >> m;
  n = s.size();
  rs = reverse_(s);
  for (int i = 0; i < m; i++) {
    cin >> p;
    l = p.size();
    rp = reverse_(p);
    if (l == 1) continue;
    for (int j = 0; j <= l; j++) {
      pref[j] = inf;
      suf[j] = -1;
    }
    t = p + '#' + s;
    L = 0, R = -1, f = 0;
    for (int j = 1; j <= n + l; j++) {
      if (j <= R)
        z[j] = min(z[j - L], R - j + 1);
      else
        z[j] = 0;
      while (t[z[j]] == t[j + z[j]] && j + z[j] <= n + l) z[j]++;
      if (j + z[j] - 1 > R) {
        L = j;
        R = j + z[j] - 1;
      }
      if (j > l) {
        if (z[j] > f) {
          for (int k = f + 1; k <= z[j]; k++) pref[k] = min(pref[k], j - l - 1);
          f = z[j];
        }
      }
    }
    t = rp + '#' + rs;
    L = 0, R = -1, f = 0;
    for (int j = 1; j <= n + l; j++) {
      if (j <= R)
        z[j] = min(z[j - L], R - j + 1);
      else
        z[j] = 0;
      while (t[z[j]] == t[j + z[j]] && j + z[j] <= n + l) z[j]++;
      if (j + z[j] - 1 > R) {
        L = j;
        R = j + z[j] - 1;
      }
      if (j > l) {
        if (z[j] > f) {
          for (int k = f + 1; k <= z[j]; k++)
            suf[k] = max(suf[k], n - 1 - (j - l - 1));
          f = z[j];
        }
      }
    }
    if (pref[l] != inf || suf[l] != -1) {
      ans++;
      continue;
    }
    for (int j = 0; j <= l; j++) {
      if (pref[j] != inf && suf[l - j] && pref[j] + l - 1 <= suf[l - j]) {
        ans++;
        break;
      }
    }
  }
  cout << ans;
  return 0;
}
