#include<bits/stdc++.h>
using namespace std;
int bfs( int s, unordered_map< int , list< int >> adj) {
int count= 0 ;
list< int > queue; // Create a queue for BFS
queue.push_back ( s) ;
list< int > :: iterator i; // 'i' will be used to get all adjacent vertices of a vertex
while ( ! queue.empty ( ) ) {
count++ ;
s = queue.front ( ) ; // Dequeue a vertex from queue and print it
queue.pop_front ( ) ;
for ( i = adj[ s] .begin ( ) ; i ! = adj[ s] .end ( ) ; ++ i) // Get all adjacent vertices of the dequeued vertex s. If a adjacent has not been visited, then mark it visited and enqueue it
queue.push_back ( * i) ;
}
return count- 1 ;
}
int main( ) {
int t; cin >> t;
while ( t-- ) {
int n,x; cin >> n>> x;
unordered_map< int , list< int >> g;
for ( int i= 0 ; i< n- 1 ; i++ ) {
int a,b; cin >> a>> b;
g[ a] .push_back ( b) ;
}
for ( auto i: g) {
vector< pair< int ,int >> childs;
cout << i.first << "--->" ;
for ( auto j: i.second ) {
int temp= bfs( j,g) ;
childs.push_back ( make_pair( temp,j) ) ;
}
sort( childs.rbegin ( ) , childs.rend ( ) ) ;
for ( auto j: childs) cout << j.first << j.second << '*' ;
cout << endl;
}
}
return 0 ;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBiZnMoaW50IHMsIHVub3JkZXJlZF9tYXA8aW50LCBsaXN0PGludD4+IGFkail7CglpbnQgY291bnQ9MDsKICAgIGxpc3Q8aW50PiBxdWV1ZTsgLy8gQ3JlYXRlIGEgcXVldWUgZm9yIEJGUwogICAgcXVldWUucHVzaF9iYWNrKHMpOwogICAgbGlzdDxpbnQ+OjppdGVyYXRvciBpOyAvLyAnaScgd2lsbCBiZSB1c2VkIHRvIGdldCBhbGwgYWRqYWNlbnQgdmVydGljZXMgb2YgYSB2ZXJ0ZXgKIAogICAgd2hpbGUoIXF1ZXVlLmVtcHR5KCkpewogICAgCWNvdW50Kys7CiAgICAgICAgcyA9IHF1ZXVlLmZyb250KCk7IC8vIERlcXVldWUgYSB2ZXJ0ZXggZnJvbSBxdWV1ZSBhbmQgcHJpbnQgaXQKICAgICAgICBxdWV1ZS5wb3BfZnJvbnQoKTsKICAgICAgICBmb3IgKGkgPSBhZGpbc10uYmVnaW4oKTsgaSAhPSBhZGpbc10uZW5kKCk7ICsraSkgLy8gR2V0IGFsbCBhZGphY2VudCB2ZXJ0aWNlcyBvZiB0aGUgZGVxdWV1ZWQgdmVydGV4IHMuIElmIGEgYWRqYWNlbnQgaGFzIG5vdCBiZWVuIHZpc2l0ZWQsIHRoZW4gbWFyayBpdCB2aXNpdGVkIGFuZCBlbnF1ZXVlIGl0CiAgICAgICAgCXF1ZXVlLnB1c2hfYmFjaygqaSk7CiAgICB9CiAgICByZXR1cm4gY291bnQtMTsKfQoKaW50IG1haW4oKXsKCWludCB0OyBjaW4+PnQ7Cgl3aGlsZSh0LS0pewoJCWludCBuLHg7IGNpbj4+bj4+eDsKCQl1bm9yZGVyZWRfbWFwPGludCwgbGlzdDxpbnQ+PiBnOwoJCWZvcihpbnQgaT0wOyBpPG4tMTsgaSsrKXsKCQkJaW50IGEsYjsgY2luPj5hPj5iOwoJCQlnW2FdLnB1c2hfYmFjayhiKTsKCQl9CgkJZm9yKGF1dG8gaTpnKXsKCQkJdmVjdG9yPHBhaXI8aW50LGludD4+IGNoaWxkczsKCQkJY291dDw8aS5maXJzdDw8Ii0tLT4iOwoJCQlmb3IoYXV0byBqOmkuc2Vjb25kKXsKCQkJCWludCB0ZW1wPSBiZnMoaixnKTsKCQkJCWNoaWxkcy5wdXNoX2JhY2sobWFrZV9wYWlyKHRlbXAsaikpOwoJCQl9CgkJCXNvcnQoY2hpbGRzLnJiZWdpbigpLCBjaGlsZHMucmVuZCgpKTsKCQkJZm9yKGF1dG8gajpjaGlsZHMpIGNvdXQ8PGouZmlyc3Q8PGouc2Vjb25kPDwnKic7CgkJCWNvdXQ8PGVuZGw7CgkJfQoJfQoJcmV0dXJuIDA7Cn0=