//邻接表
struct edge{
int v,w;
};
vector <edge> g[N];
for(int i=0;i<m;i++){
cin >> t1 >> t2 >> t3;
g[t1].push_back({t2,t3});
}
//遍历
for(auto a:g[u]){
cout << a.v << " " << a.w;
}
//链式前向星
struct node {
int to;
int w;
int nxt;
} edge[N];
int head[N],cnt=0;
void add(int u,int v,int w){
edge[cnt].to = v;
edge[cnt].w = w;
edge[cnt].nxt = head[u];
head[u] = cnt++;
}
int main() {
memset(head,-1,sizeof(head));
int n,m;
cin >> n >> m;
int t1,t2,t3;
//存图
for(int i=1;i<=n;i++){
cin >> t1 >> t2 >> t3;
add(t1,t2,t3);
}
//遍历方法
for(int i=1;i<=n;i++){
cout << i << endl;
for(int j=head[i];j!=-1;j=edge[j].nxt){
cout << i << " " << edge[j].to << " " << edge[j].w << endl;
}
cout << endl;
}
return 0;
}