#include <bits/stdc++.h>
using namespace std;
const int oo = 0x3F3F3F3F;
const int MaxN = 100005;
const int MaxR = 2;
const int MaxM = 105;
const int MaxL = 1005;
const int MaxK = 26;
struct Node {
  int value;
  Node* fail;
  Node* next[MaxK];
} memo[MaxN], *cur, *root, *q[MaxN];
int F[MaxR][MaxM][MaxL], L, len[MaxM], M;
char s[MaxN], str[MaxM][MaxL];
Node* new_node() {
  cur->value = oo;
  cur->fail = root;
  fill(cur->next, cur->next + MaxK, root);
  return cur++;
}
void init() {
  root = cur = memo;
  root = new_node();
}
void insert(const char* s) {
  int id;
  Node* ptr = root;
  while (*s) {
    id = *(s++) - 'A';
    if (ptr->next[id] == root) ptr->next[id] = new_node();
    ptr = ptr->next[id];
  }
}
void bfs() {
  int f = 0, b = 0;
  Node *u, *v;
  for (int i = 0; i < 26; i++)
    if (root->next[i] != root) q[b++] = root->next[i];
  while (f != b) {
    u = q[f++];
    for (int i = 0; i < 26; i++) {
      if (u->next[i] != root) {
        v = u->next[i];
        v->fail = u->fail->next[i];
        q[b++] = v;
      } else {
        u->next[i] = u->fail->next[i];
      }
    }
  }
}
int main() {
  Node* ptr;
  scanf("%s", s);
  scanf("%d", &M);
  for (int i = 0; i < M; i++) {
    scanf("%s", str[i]);
    len[i] = strlen(str[i]);
  }
  L = strlen(s);
  for (int fd = 0; fd < 2; fd++) {
    init();
    for (int i = 0; i < M; i++) insert(str[i]);
    bfs();
    ptr = root;
    for (int i = 0; i <= L; i++) {
      if (ptr->value == oo) ptr->value = i;
      if (i == L) break;
      ptr = ptr->next[s[i] - 'A'];
    }
    for (int i = cur - memo - 2; i >= 0; i--) {
      q[i]->fail->value = min(q[i]->fail->value, q[i]->value);
    }
    for (int i = 0; i < M; i++) {
      ptr = root;
      for (int j = 0; j <= len[i]; j++) {
        F[fd][i][j] = ptr->value;
        if (j == len[i]) break;
        ptr = ptr->next[str[i][j] - 'A'];
      }
    }
    if (!fd) {
      reverse(s, s + L);
      for (int i = 0; i < M; i++) reverse(str[i], str[i] + len[i]);
    }
  }
  int ret = 0;
  for (int i = 0; i < M; i++) {
    bool done = false;
    for (int j = 1; !done && j < len[i]; j++)
      done = F[0][i][j] + F[1][i][len[i] - j] <= L;
    if (done) ret++;
  }
  printf("%d\n", ret);
  return 0;
}
