#include <functional>
#include <iostream>
#include <cstring>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int myfind(string x,vector<string> t,int begin){
    int loc=t.size();
    for(int i=begin;i<t.size();i++){
        if(x==t[i]) {
            loc=i;
            return loc;
        }
    }
    return loc;
}
bool alleaqual(string x,vector<string> t){
    int i=0;
    bool r=true;
    while(i<t.size()) {
        if(x!=t[i]) {
            r=false;
            break;
        }
        i++;
    }
    return r;
}
int main() {
    int n,m;
    while(cin>>n){
        int a,b;
        a=n;
        vector<string> agency;
        vector<string> server;
        while(a>0){
            string i;
            cin>>i;
            agency.push_back(i);
            a--;
        }
        cin>>m;
        b=m;
        int f=1;
        while(b>0){
            string j;
            cin>>j;
            server.push_back(j);
            b--;
        }
        if(alleaqual(agency[0], server)){
            cout<<-1<<endl;
            continue;
        }
        int apt[n];
        int t=0;
        int times=0;
        while(t<server.size()){
        for(int i=0;i<n;i++){
            apt[i]=myfind(agency[i], server,t);
        }
        sort(apt,apt+n,greater<int>());
        if(t==0 && apt[0]==server.size()) {
            f=0;
            break;
        }
        t=apt[0];
        times++;
        }
        times--;
        if(times==m-1) cout<<-1<<endl;
        else cout<<times<<endl;


    }
}