#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() { while (cin >> n >> m >> q && n + m + q) { if (t != 0) 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--) { scanf("%d %d %d", &u, &v, &w); if (w < mp[u][v]) mp[u][v] = w; } while (q--) { scanf("%d", &w); if (w == 0) { scanf("%d", &u); if (flag[u]) printf("ERROR! At point %d\n", u); else { flag[u] = true; floyd(u); } } else { scanf("%d %d", &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; }