#include <iostream>
using namespace std;
#define inf 1 << 20
int dis[105][105];
int main()
{
int n;
while (cin >> n && n)
{
memset(dis, inf, sizeof(dis));
for (int i = 1; i <= n; i++)
{
int a;
cin >> a;
for (int j = 1; j <= a; j++)
{
int b, c;
cin >> b >> c;
dis[i][b] = c;
}
}
for (int k = 1; k <= n; k++)
{
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
if (i != j && dis[i][j] > dis[i][k] + dis[k][j])
{
dis[i][j] = dis[i][k]+ dis[k][j];
}
}
}
}
int maxlength;
int min_in_max = inf;
int flag_source;
for (int i = 1; i <= n; i++)
{
maxlength = 0;
for (int j = 1; j <= n; j++)
{
if (i != j && maxlength<dis[i][j])
maxlength = dis[i][j];
}
if (min_in_max>maxlength)
{
min_in_max = maxlength;
flag_source = i;
}
}
if (min_in_max<inf)
cout << flag_source << ' ' << min_in_max << endl;
else
cout << "disjoint" << endl;
}
}