#include <bits/stdc++.h>
using namespace std;
 
struct Ahocora{
 
  int idx=0;
 
  struct PMA {
      int state;
      PMA* next[256];
      vector<int> matched;
      PMA(int idx) { memset(next, 0, sizeof(next)); state = idx ; }
      ~PMA() { for(int i = 0; i < 256; i++) if(next[i]) delete next[i]; }
  };
  vector<int> set_uni(const vector<int> &a,const vector<int> &b) {
      vector<int> res;
      set_union(a.begin(),a.end(),b.begin(),b.end(), back_inserter(res));
      return res;
  };
 
  PMA *root;
 
  map<int,PMA*>M;
 
  Ahocora(vector<string> &pattern) {
      root = new PMA(idx++);
      M[idx-1]=root;
      PMA *now;
      root->next[0] = root;
      for(int i = 0; i < pattern.size(); i++) {
          now = root;
          for(int j = 0; j < pattern[i].size(); j++) {
              if(now->next[(int)pattern[i][j]] == 0){
                  now->next[(int)pattern[i][j]] = new PMA(idx++);
                  M[idx-1] = now->next[(int)pattern[i][j]];
                }
              now = now->next[(int)pattern[i][j]];
          }
          now->matched.push_back(i);
      }
 
      queue<PMA*> que;
 
      for(int i=1;i<256;i++){
          if(!root->next[i]) root->next[i] = root;
          else{
              root->next[i]->next[0] = root;
              que.push(root->next[i]);
          }
      }
 
      while(!que.empty()) {
          now = que.front(); que.pop();//cout<<1;
          for(int i = 1; i < 256; i++) {
              if(now->next[i]){
                  PMA *nxt = now->next[0];
                  while(!nxt->next[i]) nxt = nxt->next[0];
                  now->next[i]->next[0] = nxt->next[i];
                  now->next[i]->matched = set_uni(now->next[i]->matched, nxt->next[i]->matched);
                  que.push(now->next[i]);
              }
          }
      }
 
  }
  void match( const string s, vector<int> &res) {
    PMA *pma=root;
      for(int i = 0; i < s.size(); i++){
          int c = s[i];
          while(!pma->next[c]) pma = pma->next[0];
          pma = pma->next[c];
          for(int j = 0; j < pma->matched.size(); j++)
              res[pma->matched[j]] = true;
      }
  }
  typedef pair<string,int>Pi;

 
  pair<int,int> match( const string &s,int S) {
    PMA *pma=M[S];
    int res=0;
      for(int i = 0; i < s.size(); i++){
          int c = s[i];
          while(!pma->next[c]) pma = pma->next[0];
          pma = pma->next[c];
          for(int j = 0; j < pma->matched.size(); j++) res++;
      }
    return make_pair(res,pma->state);
  }
 
  //http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2212
  int NG( string s,int S) {
    PMA *pm = M[S];
    for(int i = 0; i < s.size(); i++){
        int c = s[i];
        while(!pm->next[c]) pm = pm->next[0];
        pm = pm->next[c];
        for(int j = 0; j < pm->matched.size(); j++) return -1;
    }
    return pm->state;
  }
  
};
 
#define r(i,n) for(int i=0;i<n;i++)
typedef pair<int,int>P;
typedef pair<P,P>P2;
int n,m,k,S,ans;
vector<string>v;
 
int main(){
  string s,a;
  cin>>s;
  cin>>n;
  r(i,n){
    cin>>a;
    v.push_back(a);
  }

  Ahocora AHO(v);

  r(i,s.size()){
    string p; p+=s[i];
    int res=AHO.NG(p,S);
    //cout<<res<<endl;
    if(res==-1) ans++ , S=0;
    else S = res;
    //cout<<s[i]<<endl;
  }
  cout<<ans<<endl;
}


Measured memory_bytes: 180424