#include <iostream>
using namespace std;
#define INF 1000000
#define SIZE 120
int stockers[SIZE][SIZE];
int s_size;
void floyd()
{
int i,j,k;
for ( k = 1; k <= s_size; k++ )
for ( i = 1; i <= s_size; i++ )
for ( j = 1; j <= s_size; j++ )
{
if ( stockers[i][j] > stockers[i][k] + stockers[k][j] )
stockers[i][j] = stockers[i][k] + stockers[k][j];
}
}
int main()
{
int i,j;
int n;
int id,time;
while (cin >> s_size && s_size != 0 )
{
for ( i = 1; i <= s_size; i++ )
{
for ( j = 1; j <= s_size; j++ )
{
if ( i != j ) stockers[i][j] = INF;
else stockers[i][j] = 0;
}
}
for ( i = 1; i <= s_size; i++ )
{
cin >> n;
for ( j = 1; j <= n; j++ )
{
cin >> id >> time;
//if ( id != i )
stockers[i][id] = time;
}
}
floyd();
int min_time = INF,person,max;
for( i = 1; i <= s_size; i++ )
{
max = 0;
for ( j = 1; j <= s_size; j++ )
{
if ( max < stockers[i][j] )
max = stockers[i][j];
}
if ( min_time > max ){
min_time = max;
person = i;
}
}
if ( min_time != INF ) cout << person << " " << min_time << endl;
else cout << "disjoint" << endl;
}
return 0;
}