#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
using namespace std;
const int MAXM=100001;
int n,np=0,first[101];
bool tag[101]={0},vis[101]={0};
struct data{
int next,to,len;
}E[MAXM<<1];
struct patch{
int id,dis;
}dist[101];
void addlink(int a,int b,int len)
{
E[++np]=(data){first[a],b,len};
first[a]=np;
}
struct info{
int id,dis;
friend bool operator<(info a,info b)
{
return a.dis>b.dis;
}
};
bool cmp(patch a,patch b)
{
return a.dis<b.dis;
}
void dij()
{
for(int i=0;i<=100;i++) dist[i].dis=inf;
dist[25].dis=0;
priority_queue<info>q;
q.push((info){25,0});
while(!q.empty())
{
info x=q.top();
int i=x.id;
dist[i].id=i;
q.pop();
if(vis[i]) continue;
vis[i]=1;
for(int p=first[i];p;p=E[p].next)
{
int j=E[p].to;
if(dist[j].dis>x.dis+E[p].len)
{
dist[j].dis=x.dis+E[p].len;
q.push((info){j,dist[j].dis});
}
}
}
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
char a,b;
int u,v,dis;
getchar();
scanf("%c",&a);
getchar();
scanf("%c%d",&b,&dis);
u=a-'A';
if(a>='A'&&a<='Y')
tag[u]=1;
v=b-'A';
if(b>='A'&&b<='Y')
tag[v]=1;
if(u==v) continue;
addlink(u,v,dis);
addlink(v,u,dis);
}
dij();
sort(dist,dist+100,cmp);
for(int i=0;i<=100;i++)
{
if(tag[dist[i].id])
{
printf("%c %d",dist[i].id+'A',dist[i].dis);
break;
}
}
return 0;
}
/*
5
A d 6
B d 3
C e 9
d Z 8
e Z 3
*/