#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
string s, rs;
int f[N], dp[N], rf[N], rdp[N], ans, m;
void clear() {
  for (int i = 0; i < N; ++i) f[i] = dp[i] = rf[i] = rdp[i] = 0;
}
bool check(string t) {
  clear();
  string rt = t;
  for (int i = 0; i < rt.size() / 2; ++i) swap(rt[i], rt[rt.size() - i - 1]);
  int x = 0;
  for (int i = 1; i < t.size(); ++i) {
    while (x > 0 and t[i] != t[x]) x = f[x];
    if (t[i] == t[x]) x++;
    f[i + 1] = x;
  }
  x = 0;
  for (int i = 0; i < s.size(); ++i) {
    while (x > 0 and s[i] != t[x]) x = f[x];
    if (s[i] == t[x]) x++;
    dp[i] = x;
    if (i) dp[i] = max(dp[i], dp[i - 1]);
    if (x == t.size()) x = f[x];
  }
  x = 0;
  for (int i = 1; i < rt.size(); ++i) {
    while (x > 0 and rt[i] != rt[x]) x = rf[x];
    if (rt[i] == rt[x]) x++;
    rf[i + 1] = x;
  }
  x = 0;
  for (int i = 0; i < rs.size(); ++i) {
    while (x > 0 and rs[i] != rt[x]) x = rf[x];
    if (rs[i] == rt[x]) x++;
    rdp[i] = x;
    if (i) rdp[i] = max(rdp[i], rdp[i - 1]);
    if (x == rt.size()) x = rf[x];
  }
  for (int i = 0; i < rs.size() / 2; ++i) swap(rdp[i], rdp[rs.size() - 1 - i]);
  for (int i = 1; i < s.size(); ++i)
    if (dp[i - 1] and rdp[i])
      if (dp[i - 1] + rdp[i] >= t.size()) return true;
  return false;
}
int main() {
  cin >> s >> m;
  rs = s;
  for (int i = 0; i < rs.size() / 2; ++i) swap(rs[i], rs[rs.size() - i - 1]);
  string help;
  for (int i = 0; i < m; ++i) {
    cin >> help;
    if (help.size() == 1) continue;
    if (check(help)) ans++;
  }
  cout << ans;
}
