rt
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e5+5,M=5e5+5;
class Trie
{
private:
int last,edge[M][55],number[M];
int get_value(char x)
{
if(x>='a'&&x<='z')return x-'a'+1;
return x-'a'+27;
}
public:
void insert(string x,int num)
{
int root=0,value;
for(int i=0;i<x.size();i++)
{
value=get_value(x[i]);
if(edge[root][value]==0)edge[root][value]=++last;
root=edge[root][value];
}
number[root]=num;
}
int query(string x)
{
int root=0,value;
for(int i=0;i<x.size();i++)
{
value=get_value(x[i]);
root=edge[root][value];
}
return number[root];
}
}trie;
class Binary_Indexed_Tree
{
private:
int a[N];
int lowbit(int x){return x&-x;}
public:
void add(int x,int y){for(int i=x;i<=100000;i+=lowbit(i))a[i]+=y;}
int query(int x)
{
int res=0;
for(int i=x;i>=1;i-=lowbit(i))res+=a[i];
return res;
}
}tree;
int n,a[N];
ll ans;
string x;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++)
cin>>x,trie.insert(x,i);
for(int i=1;i<=n;i++)
cin>>x,a[i]=trie.query(x);
for(int i=1;i<=n;i++)
tree.add(a[i],1),ans+=i-tree.query(a[i]);
cout<<ans;
return 0;
}