#include<stdio.h>
#include<string.h>
const int inf=1000000000;
int n,g[1000][1000],min[1000];
void dijkstra(int s)
{
int v[1000],i,j,k;
for(i=0;i<n;i++)
{
min[i]=inf;
v[i]=0;
}
for(min[s]=0,j=0;j<n;j++)
{
for(k=-1,i=0;i<n;i++)
if(!v[i]&&(k==-1||min[i]<min[k]))
k=i;
for(v[k]=1,i=0;i<n;i++)
if(!v[i]&&min[k]+g[k][i]<min[i])
min[i]=min[k]+g[k][i];
}
}
int main()
{
int t,i,j,l,time[1000];
char s[200],head[1000][5],tail[1000][5];
while(scanf("%d",&n)!=EOF,n)
{
for(i=0;i<n;i++)
for(j=0;j<n;j++)
g[i][j]=inf;
for(i=0;i<n;i++)
{
scanf("%d%s",&t,s);
l=strlen(s);
head[i][0]=s[0];
head[i][1]=s[1];
head[i][2]=s[2];
head[i][3]=s[3];
head[i][4]='\0';
tail[i][3]=s[l-1];
tail[i][2]=s[l-2];
tail[i][1]=s[l-3];
tail[i][0]=s[l-4];
tail[i][4]='\0';
time[i]=t;
}
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(!strcmp(tail[i],head[j]))
g[i][j]=time[i];
dijkstra(0);
if(min[n-1]==inf)
printf("-1\n");
else
printf("%d\n",min[n-1]);
}
return 0;
}
/**************************************************************
Problem: 2134
User: admin
Language: C++
Result: Accepted
Time:21 ms
Memory:5056 kb
****************************************************************/