( ̄▽ ̄)"
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<vector>
#include<stack>
#include<map>
using namespace std;
const int INF=30; //infÓÃ15£¬10e8¶¼wa£¬ÓÃ20£¬30²Åac
const int MAXN=110;
int lc[MAXN][MAXN];
void floyd_output(int n)
{
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
lc[i][j]=min(lc[i][j],lc[i][k]+lc[k][j]);
int maxn,minn=INF,st;
for(int i=1;i<=n;i++)
{
maxn=0;
for(int j=1;j<=n;j++)
{
if(i!=j&&maxn<lc[i][j])
maxn=lc[i][j];
//求i……j最长路径,比如从i点到j点(i不等于j),取最长的时间,因为散播是从i点向其他各点同时开始进行的,具有共时性,故应求最长时间
}
if(minn>maxn)
{
minn=maxn;
st=i;
}
}
if(minn<INF)
printf("%d %d\n",st,minn);
else printf("disjoint\n");
}
int main()
{
int n;
while(scanf("%d",&n)&&n)
{
memset(lc,INF,sizeof(lc));
for(int u=1;u<=n;u++)
{
int cnt,v,t;
scanf("%d",&cnt);
while(cnt--)
{
scanf("%d%d",&v,&t);
lc[u][v]=t;
}
}
floyd_output(n);
}
return 0;
}