#include <bits/stdc++.h>
using namespace std;

struct daili {
    string ip;
    int d;//第一次重复时的最远距离
};

int compare(daili x, daili y) {
    return x.d > y.d; //按最远距离降序排列
}

int main() {
    int n, m, sum = 0;
    int now_distance = 0;
    cin >> n; //第一行输入:代理服务器个数
    daili serv1[n];;
    for (int i = 0; i < n; i++) {
        cin >> serv1[i].ip;
        serv1[i].d = 10000; //默认不重复,最远距离为无限大
    }
    cin >> m; //输入客户服务器个数
    string serv2[m];
    for (int i = 0; i < m; i++) {
        cin >> serv2[i];
    }
    while (1) {
        for (int i = 0; i < n; i++) { //遍历所有的代理服务器
            for (int j = now_distance; j < m; j++) { //所有的客户服务器
                if (serv1[i].ip == serv2[j]) {
                    serv1[i].d = j; //第一次出现的距离
                    break;//遍历下一个代理服务器
                }
                serv1[i].d = 10000; //如果一直没有撞,就说明距离为无限大
            }
        }
        sort(serv1, serv1 + n, compare); //按照最远距离从大到小排序
        now_distance =
            serv1[0].d; //serv2的第d个元素撞了d最小是0,最大是n-1
        if (now_distance == 0) {
            cout << -1 << endl;
            return 0;
        }
        if (now_distance == 10000)
            break; //如果最远的是10000,说明已经可以走到底了
        sum++;
    }
    cout << sum << endl;
    return 0;
}