#include<algorithm>
#include<iostream>
#include<vector>
#include<cstring>
#include<queue>
using namespace std;
typedef long long lint;
typedef vector<int>vi;
typedef pair<int,int>pii;
#define rep(i,n)for(int i=0;i<(int)(n);++i)

using namespace std;

#define all(a) (a).begin(), (a).end()


// http://algoogle.hadrori.jp/algorithm/aho-corasick.html
struct PMA {
    PMA* next[256];
    vector<int> matched;
    PMA() { memset(next, 0, sizeof(next)); }
    ~PMA() { for(int i = 0; i < 256; i++) if(next[i]) delete next[i]; }
};

vector<int> set_union(const vector<int> &a,const vector<int> &b) {
    vector<int> res;
    set_union(all(a), all(b), back_inserter(res));
    return res;
}

PMA *buildPMA(vector<string> pattern) {
    PMA *root = new 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;
            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();
        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_union(now->next[i]->matched, nxt->next[i]->matched);
                que.push(now->next[i]);
            }
        }
    }
    return root;
}

int match(PMA* &pma, const string &s) {
  PMA*root=pma;
  int cnt=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];
	if(pma->matched.size()>0){
	  cnt++;
	  pma=root;
	}
    }
    return cnt;
}

int main(){
  string s;
  int n;
  cin>>s>>n;
  vector<string>p(n);
  rep(i,n)cin>>p[i];
  PMA*pma=buildPMA(p);
  cout<<match(pma,s)<<endl;
}

