#include <bits/stdc++.h>
#include <iostream>
#include <iterator>
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+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPGl0ZXJhdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwojZGVmaW5lIGludCBsb25nIGxvbmcKY29uc3QgaW50IE1BWE4gPSA1MjsKaW50IGRpc1tNQVhOXSwgYWRqW01BWE5dW01BWE5dLCBub3R2aXNbTUFYTl0sIG4gPSBNQVhOOwoKdm9pZCBkaWprc3RyYShpbnQgc3JjKSB7CiAgICBpbnQgc3ogPSBuOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIGRpc1tpXSA9IDFlOTsKICAgIGRpc1tzcmNdID0gMDsKICAgIGludCBueHQgPSBzcmM7CiAgICBpb3RhKGJlZ2luKG5vdHZpcyksIGVuZChub3R2aXMpLCAwKTsKICAgIHdoaWxlIChueHQgIT0gLTEpIHsKICAgICAgICBpbnQgdSA9IG5vdHZpc1tueHRdOwogICAgICAgIG5vdHZpc1tueHRdID0gbm90dmlzWy0tc3pdOwogICAgICAgIG54dCA9IC0xOwogICAgICAgIGludCBiZXN0ID0gMWU5OwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3o7IGkrKykgewogICAgICAgICAgICBpbnQgdiA9IG5vdHZpc1tpXTsKICAgICAgICAgICAgaWYgKGRpc1t2XSA+IGRpc1t1XSArIGFkalt1XVt2XSkgZGlzW3ZdID0gZGlzW3VdICsgYWRqW3VdW3ZdOwogICAgICAgICAgICBpZiAoZGlzW3ZdIDwgYmVzdCkgYmVzdCA9IGRpc1t2XSwgbnh0ID0gaTsKICAgICAgICB9CiAgICB9Cn0KCnZvaWQgc29sdmUoaW50IHRjKSB7CiAgICBpbnQgbTsgY2luID4+IG07CiAgICBtYXA8Y2hhciwgaW50PiBpZHg7CgogICAgZm9yIChjaGFyIGkgPSAnYSc7IGkgPD0gJ3onOyBpKyspIGlkeFtpXSA9IGkgLSAnYSc7CiAgICBmb3IgKGNoYXIgaSA9ICdBJzsgaSA8PSAnWic7IGkrKykgaWR4W2ldID0gaSAtICdBJyArIDI2OwoKICAgIGZvciAoY2hhciBpID0gJ2EnOyBpIDw9ICd6JzsgaSsrKSB7CiAgICAgICAgZm9yIChjaGFyIGogPSAnQSc7IGogPD0gJ1onOyBqKyspIGFkaltpZHhbaV1dW2lkeFtqXV0gPSAxZTksIGFkaltpZHhbal1dW2lkeFtpXV0gPSAxZTk7CiAgICB9CgogICAgZm9yIChpbnQgaSA9IDAsIHc7IGkgPCBtOyBpKyspIHsKICAgICAgICBjaGFyIGEsYjsgY2luID4+IGEgPj4gYiA+PiB3OzsKICAgICAgICBpbnQgeCA9IGlkeFthXSwgeSA9IGlkeFtiXTsKICAgICAgICBhZGpbeF1beV0gPSBtaW4oYWRqW3hdW3ldLCB3KTsKICAgICAgICBhZGpbeV1beF0gPSBtaW4oYWRqW3ldW3hdLCB3KTsKICAgIH0KCiAgICBkaWprc3RyYShpZHhbJ1onXSk7CiAgICBpbnQgYW5zID0gMWUxODsKICAgIGNoYXIgeDsKICAgIGZvciAoY2hhciBpID0gJ0EnOyBpIDwgJ1onOyBpKyspIHsKICAgICAgICBjb3V0IDw8IGRpc1tpZHhbaV1dIDw8ICdcbic7CiAgICAgICAgaW50IGl4ID0gaWR4W2ldOwogICAgICAgIGlmIChkaXNbaXhdIDwgYW5zKSB7CiAgICAgICAgICAgIGFucyA9IGRpc1t4XTsKICAgICAgICAgICAgeCA9IGk7CiAgICAgICAgfQogICAgfQogICAgLy8gY291dCA8PCB4IDw8ICcgJyA8PCBhbnMgPDwgJ1xuJzsKfQoKc2lnbmVkIG1haW4oKSB7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTtjaW4udGllKDApO2NvdXQudGllKDApOwogICAgaW50IHQgPSAxOwogICAgLy8gY2luID4+IHQ7CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSB0OyBpKyspewogICAgICAgIHNvbHZlKGkpOwogICAgfQp9