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