#include <bits/stdc++.h>
using namespace std;
void task();
int main() {
  srand(time(0));
  task();
  return 0;
}
const int N = 1e5 + 10;
char buf[N];
string s, rs;
string t;
vector<int> z_func(string s) {
  int n = s.length();
  vector<int> z(n, 0);
  int l = 0, r = 0;
  for (int i = 1; i < n; ++i) {
    if (r >= i) z[i] = min(z[i - l], r - i + 1);
    while (z[i] + i < n && s[z[i]] == s[z[i] + i]) ++z[i];
    if (z[i] + i - 1 > r) l = i, r = z[i] + i - 1;
  }
  return z;
}
void task() {
  scanf("%s", buf);
  s = buf;
  rs = s;
  reverse((rs.begin()), (rs.end()));
  int q;
  scanf("%d", &q);
  int ans = 0;
  while (q--) {
    scanf("%s", buf);
    t = buf;
    if (t.length() < 2) continue;
    vector<int> z1 = z_func(t + "!" + s + "!");
    reverse((t.begin()), (t.end()));
    vector<int> z2 = z_func(t + "!" + rs + "!");
    vector<int> z(((int)((z1).size())), 0);
    for (int i = ((int)((z1).size())) - 1; i > t.length(); --i)
      if (z1[i]) z[i + z1[i] - 1] = max(z1[i], z[i + z1[i] - 1]);
    z1 = z;
    for (int i = ((int)((z1).size())) - 2; i > t.length(); --i)
      z1[i] = max(z1[i], z1[i + 1] - 1);
    for (int i = t.length() + 1; i < ((int)((z1).size())); ++i)
      z1[i] = max(z1[i], z1[i - 1]);
    z.assign(((int)((z2).size())), 0);
    for (int i = ((int)((z2).size())) - 1; i > t.length(); --i)
      if (z2[i]) z[i + z2[i] - 1] = max(z2[i], z[i + z2[i] - 1]);
    z2 = z;
    for (int i = ((int)((z2).size())) - 2; i > t.length(); --i)
      z2[i] = max(z2[i], z2[i + 1] - 1);
    for (int i = t.length() + 1; i < ((int)((z2).size())); ++i)
      z2[i] = max(z2[i], z2[i - 1]);
    int ok = 0;
    for (int i = 0; i < s.length() - 1; ++i) {
      if (z1[i + t.length() + 1] + z2[t.length() + s.length() - i - 1] >=
          t.length())
        ok = 1;
    }
    ans += ok;
  }
  printf("%d", ans);
}
