#include<stdio.h> #define N 200 #define max 999999 int map[N][N],d[N]; int n,ans,f; void init() { int i,j; for(i=0;i<=n;i++) { d[i]=-max; for(j=0;j<=n;j++) map[i][j]=max; } f=0;ans=max; } void floyd() { int i,j,k; for( i=1;i<=n;i++) { for(j=1;j<=n;j++) { for(k=1;k<=n;k++) { int t=map[j][i]+map[i][k]; if(map[j][k]>t) map[j][k]=t; } } } for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { if(d[i]<map[i][j]&&i!=j) { d[i]=map[i][j]; } } } } int main() { int l,num,a,b,i,j; while(scanf("%d",&n),n) { init(); for(l=1;l<=n;l++) { scanf("%d",&num); while(num--) { scanf("%d%d",&a,&b); map[l][a]=b; } } floyd(); for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { if(map[i][j]==max&&map[j][i]==max) { } else break; } if(j==n){f=0;break;} } /*for(i=1;i<=n;i++) { for(int j=1;j<=n;j++) { printf("%d ",map[i][j]); } printf("\n"); }*/ for(i=1;i<=n;i++) { if(ans>d[i]) { ans=d[i]; f=i; } } if(!f)printf("disjoint\n"); else { printf("%d %d\n",f,ans); } } }