Max_Flow<int> MF;
int n,m;
int main()
{
while(scanf("%d%d",&n,&m) != EOF)
{
if(n == 0 && m == 0) break;
MF.Init(n+5,1,n);
int u,v,w;
for(int i=0;i<m;i++)
{
scanf("%d%d%d",&u,&v,&w);
MF.Add_edge(u,v,w);
}
MF.ChangeST(1,2);
int ret = MF.Dinic();
for(int i=1;i<=n;i++)
{
if(level[i] == -1) continue;
for(int ei=head[i];ei!=-1;ei=nxt[ei])
{
if(level[pnt[ei]] == -1)
{
printf("%d %d\n",i,pnt[ei]);
}
}
}
puts("");
}
return 0;
}