#include <bits/stdc++.h>
using namespace std;
const int maxn = (int)2e5 + 100;
const int mod = (int)1e9 + 7;
const int P = (int)1e6 + 7;
const int inf = mod;
string second, t;
int q, n, m;
int pw[maxn], h1[maxn], h2[maxn], ans, suf[maxn], pref[maxn];
int get1(int l, int r) {
  return (h1[r] - h1[l - 1] * 1ll * pw[r - l + 1] % mod + mod) % mod;
}
int get2(int l, int r) {
  return (h2[r] - h2[l - 1] * 1ll * pw[r - l + 1] % mod + mod) % mod;
}
vector<int> z(string second) {
  int n = (int)second.length();
  vector<int> z(n);
  for (int i = 1, l = 0, r = 0; i < n; ++i) {
    if (i <= r) z[i] = min(r - i + 1, z[i - l]);
    while (i + z[i] < n && second[z[i]] == second[i + z[i]]) ++z[i];
    if (i + z[i] - 1 > r) l = i, r = i + z[i] - 1;
  }
  return z;
}
int main() {
  cin >> second;
  n = (int)second.size();
  cin >> q;
  while (q--) {
    cin >> t;
    m = (int)t.size();
    for (int i = 0; i <= m + 1; i++) pref[i] = inf, suf[i] = -inf;
    vector<int> c1 = z(t + '@' + second);
    for (int i = m + 1; i <= (int)c1.size() - 1; i++) {
      if (c1[i]) {
        pref[c1[i]] = min(pref[c1[i]], i - m);
      }
    }
    reverse(t.begin(), t.end());
    reverse(second.begin(), second.end());
    vector<int> c2 = z(t + '@' + second);
    for (int i = m + 1; i <= (int)c1.size() - 1; i++) {
      if (c2[i]) {
        suf[c2[i]] = max(suf[c2[i]], n - (i - m) + 1);
      }
    }
    int ok = 0;
    for (int i = m; i >= 1; i--)
      suf[i] = max(suf[i], suf[i + 1]), pref[i] = min(pref[i], pref[i + 1]);
    for (int i = 1; i <= m - 1; i++) {
      if (pref[i] == inf || suf[m - i] == -inf) continue;
      int r1 = pref[i] + i - 1, l2 = suf[m - i] - (m - i) + 1;
      if (l2 > r1) ok = 1;
    }
    ans += ok;
    reverse(second.begin(), second.end());
  }
  cout << ans << endl;
}
