#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100001;
char s[MAXN];
char rs[MAXN];
char p[1000];
char rp[1000];
int nex[1000];
int rnex[1000];
int f[MAXN];
int rf[MAXN];
int gs[MAXN];
int rgs[MAXN];
int mm(int a, int b) { return a > b ? a : b; }
void calcNext(char *str, int next[]) {
  int index = 1;
  next[0] = -1;
  while (str[index]) {
    int p = next[index - 1];
    while (p != -1) {
      if (str[p + 1] == str[index]) {
        next[index] = p + 1;
        break;
      }
      p = next[p];
    }
    if (p == -1) {
      next[index] = str[index] == str[0] ? 0 : -1;
    }
    index++;
  }
}
void kmpFind(char *str, char *pat, int next[], int f[]) {
  int k = 0;
  int index = 0;
  while (str[index]) {
    if (str[index] == pat[k]) {
      f[index] = k + 1;
      k++;
      index++;
    } else if (k > 0) {
      k = next[k - 1] + 1;
    } else {
      index++;
    }
  }
}
int main() {
  int n, m;
  scanf("%s", s);
  scanf("%d", &m);
  n = strlen(s);
  copy(s, s + n, rs);
  reverse(rs, rs + n);
  int ans = 0;
  while (m--) {
    scanf("%s", p);
    int lenp = strlen(p);
    if (lenp == 1) continue;
    copy(p, p + lenp, rp);
    reverse(rp, rp + lenp);
    calcNext(p, nex);
    calcNext(rp, rnex);
    memset(f, 0, sizeof(f));
    memset(rf, 0, sizeof(rf));
    kmpFind(s, p, nex, f);
    kmpFind(rs, rp, rnex, rf);
    partial_sum(f, f + n, gs, mm);
    partial_sum(rf, rf + n, rgs, mm);
    for (int i = 1; i < n; i++) {
      int x = gs[i - 1];
      int y = rgs[n - i - 1];
      if (x > 0 && y > 0 && x + y >= lenp) {
        ans++;
        break;
      }
    }
  }
  cout << ans << endl;
  return 0;
}
