#include <bits/stdc++.h>
using namespace std;
const int ms = 2e5 + 10, inf = 0x3f3f3f3f;
int z[ms], f[2000], g[2000];
void build(string s) {
  z[0] = 0;
  int l = 0, r = 0;
  for (int i = 1; i < s.size(); i++) {
    if (i <= r) z[i] = min(z[i - l], r - i + 1);
    while (i + z[i] < s.size() && s[z[i]] == s[i + z[i]]) z[i]++;
    if (i + z[i] - 1 > r) l = i, r = i + z[i] - 1;
  }
}
int main() {
  ios::sync_with_stdio(0), cin.tie(0);
  string s, rs;
  cin >> s;
  rs = s;
  int n = s.size();
  reverse(rs.begin(), rs.end());
  int q, ans = 0;
  cin >> q;
  while (q--) {
    memset(g, inf, sizeof g);
    memset(f, inf, sizeof f);
    memset(z, 0, sizeof z);
    string t, cc;
    cin >> t;
    cc = t + "#" + s;
    build(cc);
    int tam = t.size();
    for (int i = t.size() + 1; i < cc.size(); i++)
      g[z[i] - 1] = min(g[z[i] - 1], i - int(t.size()) - 1);
    for (int i = t.size() - 2; i >= 0; i--) g[i] = min(g[i], g[i + 1]);
    reverse(t.begin(), t.end());
    cc = t + "#" + rs;
    memset(z, 0, sizeof z);
    build(cc);
    for (int i = t.size() + 1; i < cc.size(); i++)
      f[z[i] - 1] = min(f[z[i] - 1], i - int(t.size()) - 1);
    for (int i = t.size() - 2; i >= 0; i--) f[i] = min(f[i], f[i + 1]);
    for (int i = 0; i < t.size() - 1; i++) {
      int tam_suf = tam - i - 1;
      if (f[tam - 2 - i] != inf && g[i] != inf &&
          n - tam_suf - f[tam - 2 - i] > g[i] + i) {
        ans++;
        break;
      }
    }
  }
  cout << ans << endl;
  return 0;
}
