#include<iostream> #include<queue> #include<algorithm> #include<cstring> using namespace std; int n,g[101][101],d[101]; const int INF=10000000; int broken; int spfa(int x) { queue <int > q; q.push(x); bool inq[101]; memset(inq,0,sizeof(inq)); for(int i=1;i<=n;i++)d[i]=(i==x?0:INF); while(!q.empty()) { int t=q.front(); q.pop(); inq[t]=0; for(int i=1;i<=n;i++) { if(g[t][i]&&d[i]>d[t]+g[t][i]) { d[i]=d[t]+g[t][i]; if(!inq[i]) { inq[i]=1; q.push(i); } } } } broken=0; for(int i=1;i<=n;i++) if(d[i]==INF)broken=1; int mint=-INF; for(int i=1;i<=n;i++){mint=max(d[i],mint);} return mint; } int main() { while(cin>>n&&n) { int m,k,w; memset(g,0,sizeof(g)); for(int i=1;i<=n;i++) { cin>>m; for(int j=1;j<=m;j++) { cin>>k>>w; g[i][k]=w; } } int ANS=-1,tmp=INF,haha; for(int i=1;i<=n;i++) { haha=spfa(i); if(tmp>haha&&!broken){tmp=haha;ANS=i;} } if(ANS==-1)cout<<"disjoint"<<endl; else cout<<ANS<<" "<<tmp<<endl; } }