#include using namespace std; #define inf 0x3f3f3f3f const int N = 310; int t, n, m, q, u, v, w; int mp[N][N]; bool flag[N]; // 记录是否标记 void floyd(int k) { for (int i = 0; i < n; ++i) for (int j = 0; j < n; ++j) if (mp[i][j] > mp[i][k] + mp[k][j]) mp[i][j] = mp[i][k] + mp[k][j]; } int main() { // 加快读入 ios::sync_with_stdio(false), cin.tie(0); while (cin >> n >> m >> q && n + m + q) { if (t) printf("\n"); // 谜之格式 printf("Case %d:\n", ++t); memset(mp, inf, sizeof mp); memset(flag, false, sizeof flag); for (int i = 0; i <= n; i++) mp[i][i] = 0; while (m--) { cin >> u >> v >> w; if (w < mp[u][v]) mp[u][v] = w; } while (q--) { cin >> w; if (w == 0) { cin >> u; if (flag[u]) printf("ERROR! At point %d\n", u); else { flag[u] = true; floyd(u); } } else { cin >> u >> v; if (!(flag[u] && flag[v])) printf("ERROR! At path %d to %d\n", u, v); else if (mp[u][v] == inf) printf("No such path\n"); else printf("%d\n", mp[u][v]); } } } return 0; }