#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll ans,i,j,graph[1001][1001];
string name[1001];
vector<ll> grap[1001];
ll dijk(ll start, ll cities, ll end)
{
ll dis[cities+1];
for(i=0;i<cities+1;i++)
{
dis[i]=INT_MAX;
}
dis[start]=0;
vector <ll> set;
set.push_back(start);
bool visited[cities+1];
for(i=0;i<=cities;i++)
{
visited[i]=false;
}
visited[start]=true;
ll req=start;
while(set.size()!=cities)
{
for(i=0;i<grap[req].size();i++)
{
dis[grap[req][i]]=min(dis[grap[req][i]], dis[req]+graph[req][grap[req][i]]);
}
ll reqans=INT_MAX;
for(i=1;i<=cities;i++)
{
if(visited[i]==false)
{
if(dis[i]<reqans)
{
reqans=dis[i];
req=i;
visited[req]=true;
set.push_back(i);
}
}
}
}
ans=dis[end];
return ans;
}
int main()
{
ll t;
cin>>t;
while(t--)
{
ll neigh,cities;
cin>>cities;
map<string, ll> city_index;
for(i=0;i<1001;i++)
{
for(j=0;j<1001;j++)
{
graph[i][j]=INT_MAX;
}
}
for(i=1;i<=cities;i++)
{
cin>>name[i];
city_index[name[i]]=i;
cin>>neigh;
grap[i].resize(0);
for(j=0;j<neigh;j++)
{
ll index,cost;
cin>>index>>cost;
graph[i][index]=cost;
grap[i].push_back(index);
}
}
ll queries;
cin>>queries;
while(queries--)
{
string start,end;
cin>>start>>end;
ll star,en;
star=city_index[start];
en=city_index[end];
cout<<dijk(star,cities,en)<<endl;
}
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdHlwZWRlZiBsb25nIGxvbmcgbGw7CmxsIGFucyxpLGosZ3JhcGhbMTAwMV1bMTAwMV07CnN0cmluZyBuYW1lWzEwMDFdOwp2ZWN0b3I8bGw+IGdyYXBbMTAwMV07CmxsICBkaWprKGxsIHN0YXJ0LCBsbCBjaXRpZXMsIGxsIGVuZCkKewoJbGwgZGlzW2NpdGllcysxXTsKCWZvcihpPTA7aTxjaXRpZXMrMTtpKyspCgl7CgkJZGlzW2ldPUlOVF9NQVg7Cgl9CglkaXNbc3RhcnRdPTA7Cgl2ZWN0b3IgPGxsPiBzZXQ7CglzZXQucHVzaF9iYWNrKHN0YXJ0KTsKCWJvb2wgdmlzaXRlZFtjaXRpZXMrMV07Cglmb3IoaT0wO2k8PWNpdGllcztpKyspCgl7CgkJdmlzaXRlZFtpXT1mYWxzZTsKCX0KCXZpc2l0ZWRbc3RhcnRdPXRydWU7CglsbCByZXE9c3RhcnQ7Cgl3aGlsZShzZXQuc2l6ZSgpIT1jaXRpZXMpCgl7CgkJZm9yKGk9MDtpPGdyYXBbcmVxXS5zaXplKCk7aSsrKQoJCXsKCQkJZGlzW2dyYXBbcmVxXVtpXV09bWluKGRpc1tncmFwW3JlcV1baV1dLCBkaXNbcmVxXStncmFwaFtyZXFdW2dyYXBbcmVxXVtpXV0pOwoJCX0KCQlsbCByZXFhbnM9SU5UX01BWDsKCQlmb3IoaT0xO2k8PWNpdGllcztpKyspCgkJewoJCQlpZih2aXNpdGVkW2ldPT1mYWxzZSkKCQkJewoJCQkJaWYoZGlzW2ldPHJlcWFucykKCQkJCXsKCQkJCQlyZXFhbnM9ZGlzW2ldOwoJCQkJCXJlcT1pOwoJCQkJCXZpc2l0ZWRbcmVxXT10cnVlOwoJCQkJCXNldC5wdXNoX2JhY2soaSk7CgkJCQl9CgkJCX0KCQl9Cgl9CglhbnM9ZGlzW2VuZF07CglyZXR1cm4gYW5zOwp9CmludCBtYWluKCkKewoJbGwgdDsKCWNpbj4+dDsKCXdoaWxlKHQtLSkKCXsKCQlsbCBuZWlnaCxjaXRpZXM7CgkJY2luPj5jaXRpZXM7CgkJbWFwPHN0cmluZywgbGw+IGNpdHlfaW5kZXg7CgkJZm9yKGk9MDtpPDEwMDE7aSsrKQoJCXsKCQkJZm9yKGo9MDtqPDEwMDE7aisrKQoJCQl7CgkJCQlncmFwaFtpXVtqXT1JTlRfTUFYOwoJCQl9CgkJfQoJCWZvcihpPTE7aTw9Y2l0aWVzO2krKykKCQl7CgkJCWNpbj4+bmFtZVtpXTsKCQkJY2l0eV9pbmRleFtuYW1lW2ldXT1pOwoJCQljaW4+Pm5laWdoOwoJCQlncmFwW2ldLnJlc2l6ZSgwKTsKCQkJZm9yKGo9MDtqPG5laWdoO2orKykKCQkJewoJCQkJbGwgaW5kZXgsY29zdDsKCQkJCWNpbj4+aW5kZXg+PmNvc3Q7CgkJCQlncmFwaFtpXVtpbmRleF09Y29zdDsKCQkJCWdyYXBbaV0ucHVzaF9iYWNrKGluZGV4KTsKCQkJfQoJCX0KCQlsbCBxdWVyaWVzOwoJCWNpbj4+cXVlcmllczsKCQl3aGlsZShxdWVyaWVzLS0pCgkJewoJCQlzdHJpbmcgc3RhcnQsZW5kOwoJCQljaW4+PnN0YXJ0Pj5lbmQ7CgkJCWxsIHN0YXIsZW47CgkJCXN0YXI9Y2l0eV9pbmRleFtzdGFydF07CgkJCWVuPWNpdHlfaW5kZXhbZW5kXTsKCQkJY291dDw8ZGlqayhzdGFyLGNpdGllcyxlbik8PGVuZGw7CgkJfQoJfQoJcmV0dXJuIDA7Cn0=
MQo0CmdkYW5zawoyCjIgMQozIDMKYnlkZ29zemN6CjMKMSAxCjMgMQo0IDQKdG9ydW4KMwoxIDMKMiAxCjQgMQp3YXJzemF3YQoyCjIgNAozIDEKMgpnZGFuc2sgd2Fyc3phd2EKYnlkZ29zemN6IHdhcnN6YXdhCg==
1
4
gdansk
2
2 1
3 3
bydgoszcz
3
1 1
3 1
4 4
torun
3
1 3
2 1
4 1
warszawa
2
2 4
3 1
2
gdansk warszawa
bydgoszcz warszawa