#include<string>
#include<stdio.h>
#include<algorithm>
#include<queue>
#include<vector>
#include<map>
using namespace std;
char in[20];
vector<pair<pair<int,int>,int> >g[110][1440];
vector<pair<pair<int,int>,int> >g2[110][1440];
int ijk[110][1440];
int v[110][1440];
int s[4][110][1440];
int main(){
	int a;
	while(scanf("%d",&a),a){
		for(int i=0;i<110;i++)for(int j=0;j<1440;j++){
			g[i][j].clear();
			g2[i][j].clear();
		}
		map<string,int>m;
		m["Hakodate"]=0;
		m["Tokyo"]=1;
		int n=2;
		for(int i=0;i<a;i++){
			scanf("%s",in);
			string na=in;
			if(!m.count(na))m[na]=n++;
			int p=m[na];
			int H,M;
			scanf("%d:%d",&H,&M);
			int t1=H*60+M;
			scanf("%s",in);
			string nb=in;
			if(!m.count(nb))m[nb]=n++;
			int q=m[nb];
			scanf("%d:%d",&H,&M);
			int t2=H*60+M;
			int r;
			scanf("%d",&r);
			g[p][t1].push_back(make_pair(make_pair(q,t2),r));
			g2[q][t2].push_back(make_pair(make_pair(p,t1),r));
		}
		for(int i=0;i<110;i++)for(int j=0;j<1440;j++){
			v[i][j]=0;ijk[i][j]=99999999;
		}
		priority_queue<pair<int,pair<int,int> > > Q;
		Q.push(make_pair(0,make_pair(0,480)));
		ijk[0][480]=0;
		while(Q.size()){
			int cost=-Q.top().first;
			int at=Q.top().second.first;
			int t=Q.top().second.second;
			Q.pop();
			if(v[at][t])continue;
			v[at][t]=1;
			if(t<1080&&!v[at][t+1]&&ijk[at][t+1]>cost){
				ijk[at][t+1]=cost;
				Q.push(make_pair(-cost,make_pair(at,t+1)));
			}
			for(int i=0;i<g[at][t].size();i++){
				int x=g[at][t][i].first.first;
				int y=g[at][t][i].first.second;
				int z=g[at][t][i].second;
				if(!v[x][y]&&ijk[x][y]>cost+z){
					ijk[x][y]=cost+z;
					Q.push(make_pair(-cost-z,make_pair(x,y)));
				}
			}
		}
		for(int i=0;i<n;i++)for(int j=0;j<1440;j++)
			s[0][i][j]=ijk[i][j];
		for(int i=0;i<110;i++)for(int j=0;j<1440;j++){
			v[i][j]=0;ijk[i][j]=99999999;
		}
		Q.push(make_pair(0,make_pair(1,480)));
		ijk[1][480]=0;
		while(Q.size()){
			int cost=-Q.top().first;
			int at=Q.top().second.first;
			int t=Q.top().second.second;
			Q.pop();
			if(v[at][t])continue;
			v[at][t]=1;
			if(t<1080&&!v[at][t+1]&&ijk[at][t+1]>cost){
				ijk[at][t+1]=cost;
				Q.push(make_pair(-cost,make_pair(at,t+1)));
			}
			for(int i=0;i<g[at][t].size();i++){
				int x=g[at][t][i].first.first;
				int y=g[at][t][i].first.second;
				int z=g[at][t][i].second;
				if(!v[x][y]&&ijk[x][y]>cost+z){
					ijk[x][y]=cost+z;
					Q.push(make_pair(-cost-z,make_pair(x,y)));
				}
			}
		}
		for(int i=0;i<n;i++)for(int j=0;j<1440;j++)
			s[1][i][j]=ijk[i][j];
		for(int i=0;i<110;i++)for(int j=0;j<1440;j++){
			v[i][j]=0;ijk[i][j]=99999999;
		}
		Q.push(make_pair(0,make_pair(0,1080)));
		ijk[0][1080]=0;
		while(Q.size()){
			int cost=-Q.top().first;
			int at=Q.top().second.first;
			int t=Q.top().second.second;
			Q.pop();
			if(v[at][t])continue;
			v[at][t]=1;
			if(t>480&&!v[at][t-1]&&ijk[at][t-1]>cost){
				ijk[at][t-1]=cost;
				Q.push(make_pair(-cost,make_pair(at,t-1)));
			}
			for(int i=0;i<g2[at][t].size();i++){
				int x=g2[at][t][i].first.first;
				int y=g2[at][t][i].first.second;
				int z=g2[at][t][i].second;
				if(!v[x][y]&&ijk[x][y]>cost+z){
					ijk[x][y]=cost+z;
					Q.push(make_pair(-cost-z,make_pair(x,y)));
				}
			}
		}
		for(int i=0;i<n;i++)for(int j=0;j<1440;j++)
			s[2][i][j]=ijk[i][j];
		for(int i=0;i<110;i++)for(int j=0;j<1440;j++){
			v[i][j]=0;ijk[i][j]=99999999;
		}
		Q.push(make_pair(0,make_pair(1,1080)));
		ijk[1][1080]=0;
		while(Q.size()){
			int cost=-Q.top().first;
			int at=Q.top().second.first;
			int t=Q.top().second.second;
			Q.pop();
			if(v[at][t])continue;
			v[at][t]=1;
			if(t>480&&!v[at][t-1]&&ijk[at][t-1]>cost){
				ijk[at][t-1]=cost;
				Q.push(make_pair(-cost,make_pair(at,t-1)));
			}
			for(int i=0;i<g2[at][t].size();i++){
				int x=g2[at][t][i].first.first;
				int y=g2[at][t][i].first.second;
				int z=g2[at][t][i].second;
				if(!v[x][y]&&ijk[x][y]>cost+z){
					ijk[x][y]=cost+z;
					Q.push(make_pair(-cost-z,make_pair(x,y)));
				}
			}
		}
		for(int i=0;i<n;i++)for(int j=0;j<1440;j++)
			s[3][i][j]=ijk[i][j];
		int ret=999999999;
		for(int i=0;i<n;i++){
			for(int j=480;j<=1410;j++){
				ret=min(ret,s[0][i][j]+s[1][i][j]+s[2][i][j+30]+s[3][i][j+30]);
			}
		}
		if(ret>99999999)printf("0\n");
		else printf("%d\n",ret);
	}
}

Measured memory_bytes: 10864