#include <bits/stdc++.h>
using namespace std;
char s[100005], t[1005];
int n, f[2][1005], mx[100005], mn[100005];
void Getf(char *s, int len) {
  memset(f[0], 0, sizeof(f[0]));
  f[0][1] = f[0][2] = 1;
  for (int i = 2; i <= len; i++) {
    int j = f[0][i];
    while (j > 1 && s[j] != s[i]) j = f[0][j];
    if (s[j] == s[i]) j++;
    f[0][i + 1] = j;
  }
  memset(f[1], 127, sizeof(f[1]));
  f[1][len] = f[1][len - 1] = len;
  for (int i = len - 1; i >= 1; i--) {
    int j = f[1][i];
    while (j < len && s[j] != s[i]) j = f[1][j];
    if (s[j] == s[i]) j--;
    f[1][i - 1] = j;
  }
}
int main() {
  scanf("%s %d", s + 1, &n);
  int len = strlen(s + 1);
  int ans = 0;
  for (int i = 1; i <= n; i++) {
    scanf("%s", t + 1);
    int lt = strlen(t + 1);
    if (lt == 1 || lt > len) continue;
    Getf(t, lt);
    for (int j = 1, q = 1; j <= len; j++) {
      while (q > 1 && t[q] != s[j]) q = f[0][q];
      if (t[q] == s[j]) q++;
      mx[j] = max(mx[j - 1], q - 1);
    }
    bool flg = 0;
    mn[len + 1] = lt + 1;
    for (int j = len, q = lt; j >= 1; j--) {
      while (q < lt && t[q] != s[j]) q = f[1][q];
      if (t[q] == s[j]) q--;
      mn[j] = min(mn[j + 1], q + 1);
    }
    for (int j = 1; !flg && j <= len + 1; j++)
      if (mx[j - 1] >= mn[j] - 1) flg = 1;
    ans += flg;
  }
  printf("%d\n", ans);
  return 0;
}
