#include<stdio.h>
#include<vector>
#include<algorithm>
#include<iostream>
#include<algorithm>
using namespace std;
struct Edge{
int to;
int cost;
};
vector <Edge> G[10000]; //G[i]代表从i出发的边,vector里存的是边
int m,n;
int temp;
int main(void)
{
cin>>n>>m;
while(m--)
{
Edge e;
cin>>temp>>e.to>>e.cost;
G[temp].push_back(e);
}
//遍历
for(int i=1;i<=n;i++)
{
for(int j=0;j<G[i].size();j++)//每条边
{
Edge e=G[i][j];
cout<<i<<"->"<<e.to<<" :"<<e.cost<<endl;
}
}
return 0;
}
4 5
1 4 9
4 3 8
1 2 5
2 4 6
1 3 7