#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 ****************************************************************/