#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);
}
}
}