#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e7 + 68;
const long long nuLL = LLONG_MIN;
struct DSU {
int par[maxn];
void init(int n) {
for (int i = 1 ; i <= n ; i++) par[i] = i;
}
int find(int u) {
return par[u] == u ? u : par[u] = find(par[u]);
}
bool join(int u , int v) {
u = find(u);
v = find(v);
if (u == v) return false;
par[u] = v;
return true;
}
} dsu;
mt19937 rd(chrono::steady_clock::now().time_since_epoch().count());
long long rand(long long l , long long r) {
assert(l <= r);
return uniform_int_distribution<long long>(l , r)(rd);
}
int u , v;
vector<pair<int , int>> list_edge;
void rand_tree(int n , long long stW = nuLL , long long enW = nuLL) {
dsu.init(n);
list_edge.clear();
for (int i = 1 ; i < n ; i++) {
u = rand(1 , n);
v = rand(1 , n);
while (dsu.join(u , v) == false) {
u = rand(1 , n);
v = rand(1 , n);
}
list_edge.push_back(make_pair(u , v));
}
random_shuffle(list_edge.begin() , list_edge.end());
for (pair<int , int> p : list_edge) {
cout << p.first << ' ' << p.second;
if (stW != nuLL) cout << ' ' << rand(stW , enW) << '\n'; else cout << '\n';
}
}
void rand_tree_perfect(int n , long long stW = nuLL , long long enW = nuLL) {
for (int i = 2 ; i <= n ; i++) {
bool R = rand(false , true);
if (R == true) list_edge.push_back(make_pair(i / 2 , i));
else list_edge.push_back(make_pair(i , i / 2));
}
random_shuffle(list_edge.begin() , list_edge.end());
for (pair<int , int> p : list_edge) {
cout << p.first << ' ' << p.second;
if (stW != nuLL) cout << ' ' << rand(stW , enW) << '\n'; else cout << '\n';
}
}
vector<int> list_int;
void rand_tree_line(int n , long long stW = nuLL , long long enW = nuLL) {
for (int i = 1 ; i <= n ; i++) list_int.push_back(i);
random_shuffle(list_int.begin() , list_int.end());
for (int i = 1 ; i < n ; i++) {
bool R = rand(false , true);
if (R == true) cout << list_int[i - 1] << ' ' << list_int[i];
else cout << list_int[i] << ' ' << list_int[i - 1];
if (stW != nuLL) cout << ' ' << rand(stW , enW) << '\n'; else cout << '\n';
}
}
int32_t main() {
ios_base :: sync_with_stdio(false);
cin.tie(0); cout.tie(0);
srand(time(NULL));
freopen("txt.inp" , "w" , stdout);
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3QgaW50IG1heG4gPSAxZTcgKyA2ODsKY29uc3QgbG9uZyBsb25nIG51TEwgPSBMTE9OR19NSU47CgpzdHJ1Y3QgRFNVIHsKICAgICAgICBpbnQgcGFyW21heG5dOwoKICAgICAgICB2b2lkIGluaXQoaW50IG4pIHsKICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAxIDsgaSA8PSBuIDsgaSsrKSBwYXJbaV0gPSBpOwogICAgICAgIH0KCiAgICAgICAgaW50IGZpbmQoaW50IHUpIHsKICAgICAgICAgICAgICAgIHJldHVybiBwYXJbdV0gPT0gdSA/IHUgOiBwYXJbdV0gPSBmaW5kKHBhclt1XSk7CiAgICAgICAgfQoKICAgICAgICBib29sIGpvaW4oaW50IHUgLCBpbnQgdikgewogICAgICAgICAgICAgICAgdSA9IGZpbmQodSk7CiAgICAgICAgICAgICAgICB2ID0gZmluZCh2KTsKCiAgICAgICAgICAgICAgICBpZiAodSA9PSB2KSByZXR1cm4gZmFsc2U7CgogICAgICAgICAgICAgICAgcGFyW3VdID0gdjsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KfSBkc3U7CgptdDE5OTM3IHJkKGNocm9ubzo6c3RlYWR5X2Nsb2NrOjpub3coKS50aW1lX3NpbmNlX2Vwb2NoKCkuY291bnQoKSk7Cgpsb25nIGxvbmcgcmFuZChsb25nIGxvbmcgbCAsIGxvbmcgbG9uZyByKSB7CiAgICAgICAgYXNzZXJ0KGwgPD0gcik7CiAgICAgICAgcmV0dXJuIHVuaWZvcm1faW50X2Rpc3RyaWJ1dGlvbjxsb25nIGxvbmc+KGwgLCByKShyZCk7Cn0KCmludCB1ICwgdjsKdmVjdG9yPHBhaXI8aW50ICwgaW50Pj4gbGlzdF9lZGdlOwoKdm9pZCByYW5kX3RyZWUoaW50IG4gLCBsb25nIGxvbmcgc3RXID0gbnVMTCAsIGxvbmcgbG9uZyBlblcgPSBudUxMKSB7CiAgICAgICAgZHN1LmluaXQobik7CiAgICAgICAgbGlzdF9lZGdlLmNsZWFyKCk7CgogICAgICAgIGZvciAoaW50IGkgPSAxIDsgaSA8IG4gOyBpKyspIHsKICAgICAgICAgICAgICAgIHUgPSByYW5kKDEgLCBuKTsKICAgICAgICAgICAgICAgIHYgPSByYW5kKDEgLCBuKTsKICAgICAgICAgICAgICAgIHdoaWxlIChkc3Uuam9pbih1ICwgdikgPT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdSA9IHJhbmQoMSAsIG4pOwogICAgICAgICAgICAgICAgICAgICAgICB2ID0gcmFuZCgxICwgbik7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgbGlzdF9lZGdlLnB1c2hfYmFjayhtYWtlX3BhaXIodSAsIHYpKTsKICAgICAgICB9CgogICAgICAgIHJhbmRvbV9zaHVmZmxlKGxpc3RfZWRnZS5iZWdpbigpICwgbGlzdF9lZGdlLmVuZCgpKTsKCiAgICAgICAgZm9yIChwYWlyPGludCAsIGludD4gcCA6IGxpc3RfZWRnZSkgewogICAgICAgICAgICAgICAgY291dCA8PCBwLmZpcnN0IDw8ICcgJyA8PCBwLnNlY29uZDsKICAgICAgICAgICAgICAgIGlmIChzdFcgIT0gbnVMTCkgY291dCA8PCAnICcgPDwgcmFuZChzdFcgLCBlblcpIDw8ICdcbic7IGVsc2UgY291dCA8PCAnXG4nOwogICAgICAgIH0KfQoKdm9pZCByYW5kX3RyZWVfcGVyZmVjdChpbnQgbiAsIGxvbmcgbG9uZyBzdFcgPSBudUxMICwgbG9uZyBsb25nIGVuVyA9IG51TEwpIHsKICAgICAgICBmb3IgKGludCBpID0gMiA7IGkgPD0gbiA7IGkrKykgewogICAgICAgICAgICAgICAgYm9vbCBSID0gcmFuZChmYWxzZSAsIHRydWUpOwogICAgICAgICAgICAgICAgaWYgKFIgPT0gdHJ1ZSkgbGlzdF9lZGdlLnB1c2hfYmFjayhtYWtlX3BhaXIoaSAvIDIgLCBpKSk7CiAgICAgICAgICAgICAgICBlbHNlIGxpc3RfZWRnZS5wdXNoX2JhY2sobWFrZV9wYWlyKGkgLCBpIC8gMikpOwogICAgICAgIH0KCiAgICAgICAgcmFuZG9tX3NodWZmbGUobGlzdF9lZGdlLmJlZ2luKCkgLCBsaXN0X2VkZ2UuZW5kKCkpOwoKICAgICAgICBmb3IgKHBhaXI8aW50ICwgaW50PiBwIDogbGlzdF9lZGdlKSB7CiAgICAgICAgICAgICAgICBjb3V0IDw8IHAuZmlyc3QgPDwgJyAnIDw8IHAuc2Vjb25kOwogICAgICAgICAgICAgICAgaWYgKHN0VyAhPSBudUxMKSBjb3V0IDw8ICcgJyA8PCByYW5kKHN0VyAsIGVuVykgPDwgJ1xuJzsgZWxzZSBjb3V0IDw8ICdcbic7CiAgICAgICAgfQp9Cgp2ZWN0b3I8aW50PiBsaXN0X2ludDsKCnZvaWQgcmFuZF90cmVlX2xpbmUoaW50IG4gLCBsb25nIGxvbmcgc3RXID0gbnVMTCAsIGxvbmcgbG9uZyBlblcgPSBudUxMKSB7CiAgICAgICAgZm9yIChpbnQgaSA9IDEgOyBpIDw9IG4gOyBpKyspIGxpc3RfaW50LnB1c2hfYmFjayhpKTsKCiAgICAgICAgcmFuZG9tX3NodWZmbGUobGlzdF9pbnQuYmVnaW4oKSAsIGxpc3RfaW50LmVuZCgpKTsKCiAgICAgICAgZm9yIChpbnQgaSA9IDEgOyBpIDwgbiA7IGkrKykgewogICAgICAgICAgICAgICAgYm9vbCBSID0gcmFuZChmYWxzZSAsIHRydWUpOwoKICAgICAgICAgICAgICAgIGlmIChSID09IHRydWUpIGNvdXQgPDwgbGlzdF9pbnRbaSAtIDFdIDw8ICcgJyA8PCBsaXN0X2ludFtpXTsKICAgICAgICAgICAgICAgIGVsc2UgY291dCA8PCBsaXN0X2ludFtpXSA8PCAnICcgPDwgbGlzdF9pbnRbaSAtIDFdOwoKICAgICAgICAgICAgICAgIGlmIChzdFcgIT0gbnVMTCkgY291dCA8PCAnICcgPDwgcmFuZChzdFcgLCBlblcpIDw8ICdcbic7IGVsc2UgY291dCA8PCAnXG4nOwogICAgICAgIH0KfQoKaW50MzJfdCBtYWluKCkgewogICAgICAgIGlvc19iYXNlIDo6IHN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7IAogICAgICAgIGNpbi50aWUoMCk7IGNvdXQudGllKDApOwoKICAgICAgICBzcmFuZCh0aW1lKE5VTEwpKTsKCiAgICAgICAgZnJlb3BlbigidHh0LmlucCIgLCAidyIgLCBzdGRvdXQpOwoKICAgICAgICByZXR1cm4gMDsKfQ==