#include <bits/stdc++.h>
using namespace std;
#define int long long
const int MAXN = 52;
int dis[MAXN], adj[MAXN][MAXN], notvis[MAXN], n = MAXN;
void dijkstra(int src) {
int sz = n;
for (int i = 0; i < n; i++) dis[i] = 1e9;
dis[src] = 0;
int nxt = src;
iota(begin(notvis), end(notvis), 0);
while (nxt != -1) {
int u = notvis[nxt];
notvis[nxt] = notvis[--sz];
nxt = -1;
int best = 1e9;
for (int i = 0; i < sz; i++) {
int v = notvis[i];
if (dis[v] > dis[u] + adj[u][v]) dis[v] = dis[u] + adj[u][v];
if (dis[v] < best) best = dis[v], nxt = i;
}
}
}
void solve(int tc) {
int m; cin >> m;
map<char, int> idx;
for (char i = 'a'; i <= 'z'; i++) idx[i] = i - 'a';
for (char i = 'A'; i <= 'Z'; i++) idx[i] = i - 'A' + 26;
for (char i = 'a'; i <= 'z'; i++) {
for (char j = 'A'; j <= 'Z'; j++) adj[idx[i]][idx[j]] = 1e9, adj[idx[j]][idx[i]] = 1e9;
}
for (int i = 0, w; i < m; i++) {
char a,b; cin >> a >> b >> w;;
int x = idx[a], y = idx[b];
adj[x][y] = min(adj[x][y], w);
adj[y][x] = min(adj[y][x], w);
}
dijkstra(idx['Z']);
int ans = 1e18;
char x;
for (char i = 'A'; i < 'Z'; i++) {
cout << dis[idx[i]] << '\n';
int ix = idx[i];
if (dis[ix] < ans) {
ans = dis[x];
x = i;
}
}
// cout << x << ' ' << ans << '\n';
}
signed main() {
ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int t = 1;
// cin >> t;
for (int i = 1; i <= t; i++){
solve(i);
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgaW50IGxvbmcgbG9uZwpjb25zdCBpbnQgTUFYTiA9IDUyOwppbnQgZGlzW01BWE5dLCBhZGpbTUFYTl1bTUFYTl0sIG5vdHZpc1tNQVhOXSwgbiA9IE1BWE47Cgp2b2lkIGRpamtzdHJhKGludCBzcmMpIHsKICAgIGludCBzeiA9IG47CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgZGlzW2ldID0gMWU5OwogICAgZGlzW3NyY10gPSAwOwogICAgaW50IG54dCA9IHNyYzsKICAgIGlvdGEoYmVnaW4obm90dmlzKSwgZW5kKG5vdHZpcyksIDApOwogICAgd2hpbGUgKG54dCAhPSAtMSkgewogICAgICAgIGludCB1ID0gbm90dmlzW254dF07CiAgICAgICAgbm90dmlzW254dF0gPSBub3R2aXNbLS1zel07CiAgICAgICAgbnh0ID0gLTE7CiAgICAgICAgaW50IGJlc3QgPSAxZTk7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzejsgaSsrKSB7CiAgICAgICAgICAgIGludCB2ID0gbm90dmlzW2ldOwogICAgICAgICAgICBpZiAoZGlzW3ZdID4gZGlzW3VdICsgYWRqW3VdW3ZdKSBkaXNbdl0gPSBkaXNbdV0gKyBhZGpbdV1bdl07CiAgICAgICAgICAgIGlmIChkaXNbdl0gPCBiZXN0KSBiZXN0ID0gZGlzW3ZdLCBueHQgPSBpOwogICAgICAgIH0KICAgIH0KfQoKdm9pZCBzb2x2ZShpbnQgdGMpIHsKICAgIGludCBtOyBjaW4gPj4gbTsKICAgIG1hcDxjaGFyLCBpbnQ+IGlkeDsKCiAgICBmb3IgKGNoYXIgaSA9ICdhJzsgaSA8PSAneic7IGkrKykgaWR4W2ldID0gaSAtICdhJzsKICAgIGZvciAoY2hhciBpID0gJ0EnOyBpIDw9ICdaJzsgaSsrKSBpZHhbaV0gPSBpIC0gJ0EnICsgMjY7CgogICAgZm9yIChjaGFyIGkgPSAnYSc7IGkgPD0gJ3onOyBpKyspIHsKICAgICAgICBmb3IgKGNoYXIgaiA9ICdBJzsgaiA8PSAnWic7IGorKykgYWRqW2lkeFtpXV1baWR4W2pdXSA9IDFlOSwgYWRqW2lkeFtqXV1baWR4W2ldXSA9IDFlOTsKICAgIH0KCiAgICBmb3IgKGludCBpID0gMCwgdzsgaSA8IG07IGkrKykgewogICAgICAgIGNoYXIgYSxiOyBjaW4gPj4gYSA+PiBiID4+IHc7OwogICAgICAgIGludCB4ID0gaWR4W2FdLCB5ID0gaWR4W2JdOwogICAgICAgIGFkalt4XVt5XSA9IG1pbihhZGpbeF1beV0sIHcpOwogICAgICAgIGFkalt5XVt4XSA9IG1pbihhZGpbeV1beF0sIHcpOwogICAgfQoKICAgIGRpamtzdHJhKGlkeFsnWiddKTsKICAgIGludCBhbnMgPSAxZTE4OwogICAgY2hhciB4OwogICAgZm9yIChjaGFyIGkgPSAnQSc7IGkgPCAnWic7IGkrKykgewogICAgICAgIGNvdXQgPDwgZGlzW2lkeFtpXV0gPDwgJ1xuJzsKICAgICAgICBpbnQgaXggPSBpZHhbaV07CiAgICAgICAgaWYgKGRpc1tpeF0gPCBhbnMpIHsKICAgICAgICAgICAgYW5zID0gZGlzW3hdOwogICAgICAgICAgICB4ID0gaTsKICAgICAgICB9CiAgICB9CiAgICAvLyBjb3V0IDw8IHggPDwgJyAnIDw8IGFucyA8PCAnXG4nOwp9CgpzaWduZWQgbWFpbigpIHsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpO2Npbi50aWUoMCk7Y291dC50aWUoMCk7CiAgICBpbnQgdCA9IDE7CiAgICAvLyBjaW4gPj4gdDsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IHQ7IGkrKyl7CiAgICAgICAgc29sdmUoaSk7CiAgICB9Cn0=