#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const ll inf = 1e18;
const int N = 2 * 1e5 + 10;
ll res;
ll a[N], pre[N];
vector<ll> PrefixFunction(string s) {
  vector<ll> ans(s.size());
  for (int i = 1; i < s.size(); ++i) {
    ll j = ans[i - 1];
    while (j > 0 && s[i] != s[j]) j = ans[j - 1];
    j += (s[i] == s[j]);
    ans[i] = j;
  }
  return ans;
}
void solve() {
  ll q;
  string s, ss;
  cin >> s >> q;
  while (q--) {
    ll ptr = 0, fl = 0;
    cin >> ss;
    if (ss.size() == 1) continue;
    vector<ll> ans = PrefixFunction(ss);
    for (int i = 0; i < s.size(); ++i) {
      if (ptr != ss.size()) {
        if (s[i] == ss[ptr])
          ++ptr;
        else {
          if (ptr)
            ptr = ans[ptr - 1], --i;
          else
            ptr = 0;
        }
      }
      pre[i + 1] = max(pre[i + 1], max(pre[i], ptr));
    }
    reverse(ss.begin(), ss.end());
    ans = PrefixFunction(ss);
    ptr = 0;
    for (int i = s.size() - 1; i >= 0; --i) {
      if (ptr != ss.size()) {
        if (s[i] == ss[ptr])
          ++ptr;
        else {
          if (ptr)
            ptr = ans[ptr - 1], ++i;
          else
            ptr = 0;
        }
      }
      if (pre[i] + ptr >= ss.size()) fl = 1;
    }
    res += fl;
    memset(pre, 0, sizeof pre);
  }
  cout << res;
}
int main(int argc, char const *argv[]) {
  ios_base::sync_with_stdio(0);
  cin.tie(NULL);
  cout.tie(NULL);
  ll t = 1;
  while (t--) {
    solve();
  }
}
