#include <iostream>
#include <cstring>
#include <vector>

using namespace std;

char v[30][20];
char sir[100020];

struct elem{char str[500020]; int val = 0;};

vector <elem> R;

int n;
char result[500020];

void change(char s[]);

int main()
{
    int i, j, total = 0;
    for(i = 1; i <= 26; i++){
        cin.getline(sir, 20);
        sir[1] = '\0';
        strcpy(v[sir[0]-'a'+1],sir+2);
    }
    cin >> n; cin.get();
    for(i = 1; i <= n; i++){
        cin.getline(sir,100020);
        change(sir);
        for(j = 0; j < total; j++){
            if(strcmp(R[j].str, result) == 0){
                R[j].val++;
                break;
            }
        }
        if(j == total){
            elem x;
            strcpy(x.str, result);
            x.val = 1 ;
            R.push_back(x);
            total++;
        }
    }
    int maxim = 0;
    int lg = R.size();
    for(i = 0; i < lg; i++){
        if(R[i].val > maxim)
            maxim = R[i].val;
    }
    if(maxim == 0) cout << "-1\n";
    else cout << maxim << '\n';
    return 0;
}


void change(char s[]){
    memset(result, 0, sizeof(result));
    //result[0] = "\0";
    int lg = strlen(s);
    for(int i = 0; i < lg; i++){
        strcat(result,v[s[i]-'a'+1]);
    }
    result[strlen(result)] = '\0';
}