#include<bits/stdc++.h>
using namespace std;
int m[1000050][30],n,q,zt[1000050],js=0,jyh[100][10000],jss;
string s,a;
void dfs(int bd,int trie,string sb){
if(bd>a.size()||trie>js)return;
if(jyh[bd][trie]==1){
return;
}else{
jyh[bd][trie]=1;
}
if(zt[trie]==1&&bd==a.size()){
jss++;
zt[trie]=0;
}
if(a[bd]>='A'&&a[bd]<='Z'){
if(a[bd]=='A'){
dfs(bd+1,m[trie]['A'-'A'],sb+"A");
}else if(a[bd]=='C'){
dfs(bd+1,m[trie]['C'-'A'],sb+"C");
}else if(a[bd]=='G'){
dfs(bd+1,m[trie]['G'-'A'],sb+"G");
}else if(a[bd]=='T'){
dfs(bd+1,m[trie]['T'-'A'],sb+"T");
}
}else if(a[bd]=='?'){
dfs(bd+1,m[trie]['A'-'A'],sb+"A");
dfs(bd+1,m[trie]['C'-'A'],sb+"C");
dfs(bd+1,m[trie]['G'-'A'],sb+"G");
dfs(bd+1,m[trie]['T'-'A'],sb+"T");
}else if(a[bd]=='*'){
dfs(bd+1,trie,sb);
dfs(bd,m[trie]['A'-'A'],sb+"A");
dfs(bd,m[trie]['C'-'A'],sb+"C");
dfs(bd,m[trie]['G'-'A'],sb+"G");
dfs(bd,m[trie]['T'-'A'],sb+"T");
}
return;
}
int main(){
ios::sync_with_stdio(false);
cin>>a;
cin>>n;
for(int i=0;i<n;i++){
cin>>s;
int no=0,len=s.size();
for(int j=0;j<len;j++){
if(m[no][s[j]-'A']==0){
js++;
m[no][s[j]-'A']=js;
}
no=m[no][s[j]-'A'];
}
zt[no]=1;
}
dfs(0,0,"");
cout<<n-jss;
return 0;
}