广播传送
#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
typedef long long ll;
using namespace std;
//struct edge
//{
// ll len;
//};
int n,m,c,s,d;
int t,z;
int a[233],b[233];
int p[250000];
int dst[800];
int N;
int po;
int vis[800];
int mp[603][603];
void solve(int x)
{
for(int i=1; i<=n; i++)
{
dst[i]=mp[x][i];
}
for(int i=1; i<=n; i++)
{
vis[i]=0;
}
dst[x]=0;
vis[x] = 1;
for(int i=1; i<=n; i++)
{
int ans=inf;
int k=-1;
for(int j=1; j<=n; j++)
{
if(!vis[j]&&dst[j]<ans)
{
k = j;
ans = dst[j];
}
}
if (k==-1)break;
vis[k] = 1;
for(int j =1; j<=n; j++)
{
if(!vis[j]&&dst[k]+mp[k][j]<dst[j])
{
dst[j]=dst[k]+mp[k][j];
}
}
}
}
int main()
{
while ( ~scanf("%d",&n))
{
if(n==0)break;
for(int i=0; i<=n; ++i)
for(int j=0; j<=n; ++j)
{
mp[i][j]=mp[j][i]=inf;
if(i==j)
mp[i][i]=0;
}
for(int i=1; i<=n; ++i)
{
scanf("%d",&m);
for(int j=0; j<m; ++j)
{
scanf("%d%d",&t,&z);
mp[i][t]=z;
}
}
int ans=inf;
int anss;
for(int i=1; i<=n; ++i)
{
memset(dst,0,sizeof(dst));
solve(i);
sort(dst+1,dst+1+n);
if(dst[n]!=inf&&dst[n]<ans)
{
ans=dst[n];
anss=i;
}
}
if(ans<inf)
{
printf("%d %d\n",anss,ans);
}
else
{
printf("disjoint\n");
}
}
return 0;
}