#include <bits/stdc++.h>
using namespace std;
const int NN = 1000001;
const int inf = 1e9;
const int sma = 26;
void smax(int &u, int v) {
  if (u < v) u = v;
}
void smin(int &u, int v) {
  if (u > v) u = v;
}
struct automaton {
  int sz, ed;
  struct node {
    int deep, fail, nxt[sma], mx, mn;
    void clear() {
      for (int i = 0; i < sma; i++) nxt[i] = -1;
      fail = 0;
      deep = 0;
      mx = 0;
      mn = inf;
    }
  } mem[NN * 2];
  int E;
  int shead[NN << 1], snxt[NN << 1], sto[NN << 1];
  void init() {
    mem[1].clear();
    mem[0].clear();
    for (int i = 0; i < sma; i++) mem[0].nxt[i] = 1;
    mem[0].deep = -1;
    sz = 2;
    ed = 1;
    return;
  }
  void insert(int c) {
    int p = sz++;
    mem[p].clear();
    mem[p].deep = mem[ed].deep + 1;
    mem[p].mx = mem[p].mn = mem[p].deep;
    while (mem[ed].nxt[c] == -1) {
      mem[ed].nxt[c] = p;
      ed = mem[ed].fail;
    }
    int p1 = mem[ed].nxt[c];
    if (mem[p1].deep == mem[ed].deep + 1)
      mem[p].fail = p1;
    else {
      int p2 = sz++;
      mem[p2] = mem[p1];
      mem[p2].deep = mem[ed].deep + 1;
      mem[p1].fail = mem[p].fail = p2;
      while (mem[ed].nxt[c] == p1) {
        mem[ed].nxt[c] = p2;
        ed = mem[ed].fail;
      }
    }
    ed = p;
    return;
  }
  void add(int u, int v) {
    snxt[E] = shead[u];
    sto[E] = v;
    shead[u] = E++;
  }
  void make_tree() {
    memset(shead, -1, sizeof shead);
    E = 0;
    for (int i = 2; i < sz; i++) add(mem[i].fail, i);
    dfs(1);
  }
  void dfs(int u) {
    for (int e = shead[u]; ~e; e = snxt[e]) {
      int v = sto[e];
      dfs(v);
      smax(mem[u].mx, mem[v].mx);
      smin(mem[u].mn, mem[v].mn);
    }
  }
  int solve(char *s) {
    int n = strlen(s);
    if (n == 1) return 0;
    int p = 1;
    for (int i = 0; s[i]; i++) {
      p = mem[p].nxt[s[i] - 'A'];
      if (p == -1) return 0;
      int q = 1;
      for (int j = i + 1; j < n; j++) {
        q = mem[q].nxt[s[j] - 'A'];
        if (q == -1) break;
      }
      if (q == -1) continue;
      if (mem[q].mx - mem[p].mn >= n - i - 1) return 1;
    }
    return 0;
  }
} sam;
char s[NN];
int main() {
  scanf("%s", s);
  int n = strlen(s);
  sam.init();
  for (int i = 0; i < n; i++) sam.insert(s[i] - 'A');
  sam.make_tree();
  int m;
  scanf("%d", &m);
  int ans = 0;
  while (m--) {
    scanf("%s", s);
    ans += sam.solve(s);
  }
  cout << ans;
  return 0;
}
