#include <iostream>
#include <cstdio>
#include <map>
using namespace std;
#define n 52
struct Edge{
int dis , to , next;
}edge[10005];
int m , cnt , head[3000] , dis[3000] , ans = 0x7fffffff;
char anss;
bool vis[3000];
map <char , int> point;
inline void add (int &in , int &ou , int &dis)
{
++cnt;
edge[cnt].to = ou;
edge[cnt].next = head[in];
edge[cnt].dis = dis;
head[in] = cnt;
}
void Dijkstra (int &in , char &h)
{
for(int i = 1 ; i <= n ; i ++) dis[i] = 0x7fffffff , vis[i] = true;
dis[in] = 0;
long long cnr = in , minn = 0x7fffffff;
while(vis[cnr])
{
vis[cnr] = false;
for(int i = head[cnr] ; i ; i = edge[i].next)
{
if(dis[edge[i].to] > dis[cnr] + edge[i].dis)
dis[edge[i].to] = dis[cnr] + edge[i].dis;
}
minn = 0x7fffffff;
cnr = 0;
for(int i = 1 ; i <= n ; i ++)
{
if(vis[i] && dis[i] < minn)
{
cnr = i;
minn = dis[i];
}
}
if(cnr == 0) break;
}
if(dis[n] < ans)
{
ans = dis[n];
anss = h;
}
}
int main()
{
for(char i = 'a' ; i <= 'z' ; i ++) point.insert(pair<char,int> (i,i - 'a' + 1));
for(char i = 'A' ; i <= 'Z' ; i ++) point.insert(pair<char,int> (i,i - 'A' + 27));
cin >> m;
for(int i = 1 ; i <= m ; i ++)
{
char u , v;
int len;
cin >> u >> v >> len;
add(point[u] , point[v] , len);
add(point[v] , point[u] , len);
}
for(char i = 'A' ; i <= 'Y' ; i ++)
{
Dijkstra(point[i] , i);
}
cout << anss << " " << ans << "\n";
return 0;
}
谢谢大佬