#include <iostream>
#include <vector>
int main() {
// V = number of vertices
// E = number of edges
int V, E;
int x, y, w;
std::cin >> V >> E;
std::vector <std::vector <std::pair <int, int> > > graph_directed(V);
std::vector <std::vector <std::pair <int, int> > > graph_undirected(V);
// assuming 0-based indexing of vertices
for(int i = 0; i < E; i++) {
std::cin >> x >> y >> w;
graph_directed[x].push_back({y, w}); // adding a single edge in directed
graph_undirected[x].push_back({y, w});
graph_undirected[y].push_back({x, w}); // adding both the edges in undirected
}
// Printing graph (showing only undirected but the code is same for both)
for(int i = 0; i < graph_undirected.size(); i++) {
std::cout << i << ": ";
for(int j = 0; j < graph_undirected[i].size(); j++)
std::cout << "{" << graph_undirected[i][j].first << ", " << graph_undirected[i][j].second << "} ";
std::cout << std::endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKaW50IG1haW4oKSB7CiAKCS8vIFYgPSBudW1iZXIgb2YgdmVydGljZXMKCS8vIEUgPSBudW1iZXIgb2YgZWRnZXMKCWludCBWLCBFOwoJaW50IHgsIHksIHc7CglzdGQ6OmNpbiA+PiBWID4+IEU7CiAJc3RkOjp2ZWN0b3IgPHN0ZDo6dmVjdG9yIDxzdGQ6OnBhaXIgPGludCwgaW50PiA+ID4gZ3JhcGhfZGlyZWN0ZWQoVik7CiAJc3RkOjp2ZWN0b3IgPHN0ZDo6dmVjdG9yIDxzdGQ6OnBhaXIgPGludCwgaW50PiA+ID4gZ3JhcGhfdW5kaXJlY3RlZChWKTsKIAoJLy8gYXNzdW1pbmcgMC1iYXNlZCBpbmRleGluZyBvZiB2ZXJ0aWNlcwoJZm9yKGludCBpID0gMDsgaSA8IEU7IGkrKykgewoJCXN0ZDo6Y2luID4+IHggPj4geSA+PiB3OwoJCWdyYXBoX2RpcmVjdGVkW3hdLnB1c2hfYmFjayh7eSwgd30pOwkvLyBhZGRpbmcgYSBzaW5nbGUgZWRnZSBpbiBkaXJlY3RlZAoJCQoJCWdyYXBoX3VuZGlyZWN0ZWRbeF0ucHVzaF9iYWNrKHt5LCB3fSk7CgkJZ3JhcGhfdW5kaXJlY3RlZFt5XS5wdXNoX2JhY2soe3gsIHd9KTsJLy8gYWRkaW5nIGJvdGggdGhlIGVkZ2VzIGluIHVuZGlyZWN0ZWQKCX0KCQoJLy8gUHJpbnRpbmcgZ3JhcGggKHNob3dpbmcgb25seSB1bmRpcmVjdGVkIGJ1dCB0aGUgY29kZSBpcyBzYW1lIGZvciBib3RoKQoJZm9yKGludCBpID0gMDsgaSA8IGdyYXBoX3VuZGlyZWN0ZWQuc2l6ZSgpOyBpKyspIHsKCQlzdGQ6OmNvdXQgPDwgaSA8PCAiOiAiOwoJCWZvcihpbnQgaiA9IDA7IGogPCBncmFwaF91bmRpcmVjdGVkW2ldLnNpemUoKTsgaisrKQoJCQlzdGQ6OmNvdXQgPDwgInsiIDw8IGdyYXBoX3VuZGlyZWN0ZWRbaV1bal0uZmlyc3QgPDwgIiwgIiA8PCBncmFwaF91bmRpcmVjdGVkW2ldW2pdLnNlY29uZCA8PCAifSAiOwoJCXN0ZDo6Y291dCA8PCBzdGQ6OmVuZGw7Cgl9CglyZXR1cm4gMDsKfQ==