#include<bits/stdc++.h>
using namespace std;
struct node{
int gu;
bool k;
}a[101][101];
vector <int> q[101];
int lu[101];
bool lu1[101],lu2[101];
int tot=1,k1,ji;
void cl2(int f){
lu1[f]=1;
for(int i=0;i<q[f].size();i++){
int y=q[f][i];
if(a[f][y].k==1&&lu1[y]==0) lu[tot]=y,tot++,cl2(y);
}
}
void cl3(int m,int n){
lu2[m]=1;
for(int k=0;k<q[m].size();k++){
int y=q[m][k];
ji+=a[y][n].gu;
if(lu2[y]!=1)
cl3(y,n);
}
}
int main(){
freopen("P1475_8.in","r",stdin);
int n;
cin>>n;
for(int i=1;i<=100;i++){
a[i][i].k=1;
}
for(int a1,b,w,i=1;i<=n;i++){
cin>>a1>>b>>w;
a[a1][b].gu=w;
if(w>50){
a[a1][b].k=1;
q[a1].push_back(b);
}
}
for(int i=1;i<=100;i++){
memset(lu1,0,sizeof(lu1));
tot=1;
memset(lu,0,sizeof(lu));
cl2(i);
for(int j=1;j<=tot;j++){
a[i][lu[j]].k=1;
}
}
for(int i=1;i<=100;i++){
for(int j=1;j<=100;j++){
if(a[i][j].k==1) continue;
ji=a[i][j].gu;
cl3(i,j);
if(ji>50) a[i][j].k=1,q[i].push_back(j),a[i][j].gu=ji;
ji=0;
memset(lu2,0,sizeof(lu2));
}
}
for(int i=1;i<=100;i++){
for(int j=1;j<=100;j++){
if(a[i][j].k==1&&i!=j) cout<<i<<" "<<j<<endl;
}
}
return 0;
}
码风有点丑,用的向量加二维数组