1 #include<iostream>
2 using namespace std;
3 int n,m;
4 int d[101][101];
5 int main()
6 {
7 int a,b;
8 while(scanf("%d",&n)&&n)
9 {
10 //用memset无法赋值INT_MAX
11 for (int i=1;i<=n;++i)
12 for(int j=1;j<=n;++j)
13 d[i][j]=INT_MAX;
14 for(int i=1;i<=n;++i)
15 {
16 scanf("%d",&m);
17 for(int j=1;j<=m;++j)
18 {
19 scanf("%d%d",&a,&b);
20 d[i][a]=b;
21 }
22 }
23 for(int k=1;k<=n;++k)
24 for(int i=1;i<=n;++i)
25 for(int j=1;j<=n;++j)
26 if(d[i][k]<INT_MAX&&d[k][j]<INT_MAX&&d[i][j]>d[i][k]+d[k][j])
27 d[i][j]=d[i][k]+d[k][j];
28 int Max;
29 int Min=INT_MAX;
30 int point=-1;
31 bool connect;
32 for(int i=1;i<=n;++i)
33 {
34 connect=1;
35 Max=-1;
36 for(int j=1;j<=n;++j)
37 if(i!=j)
38 {
39 if(d[i][j]==INT_MAX)
40 {
41 connect=0;
42 break;
43 }
44 Max=max(Max,d[i][j]);
45 }
46 if(connect&&Max<Min)
47 {
48 Min=Max;
49 point=i;
50 }
51 }
52 if(point==-1)printf("disjoint\n");
53 else printf("%d %d\n",point,Min);
54 }
55 return 0;
56 }