#include "meetings.h"
#include <bits/stdc++.h>
using namespace std;
#define rep(i, n) for (int i = 0; i < (n); i++)
typedef long long ll;
#define pb push_back
#define st first
#define nd second
void bridge(int a, int b) {
  Bridge(min(a, b), max(a, b));
}
void posortuj(vector<int> sciezka, int korzen, int last) {
  int sz = sciezka.size();
  // rep(i, sz) {
  //   cout << sciezka[i] << " ";
  // }
  // cout << '\n';
  // cout << "korzen ze sciezka = " << korzen << '\n';
  // cout << "last = " << last << '\n';
  vector<int> ans;
  rep(i, sz) {
    int v = sciezka[i];
    int poc = 0;
    int rozm = ans.size();
    int kon = rozm;
    int odp = rozm;
    while (poc < kon) {
      int sr = (poc + kon)/2;
      int w = ans[sr];
      if (Query(korzen, v, w) == v) {
        odp = sr;
        kon = sr;
      }
      else {
        poc = sr + 1;
      }
    }
    vector<int> ans2;
    rep(j, odp) {
      ans2.pb(ans[j]);
    }
    ans2.pb(v);
    for (int j = odp; j < rozm; j++) {
      ans2.pb(ans[j]);
    }
    ans = ans2;
  }
  // rep(i, sz) {
  //   cout << ans[i] << " ";
  // }
  // cout << '\n';
  if (sz > 0) {
    bridge(korzen, ans[0]);
    bridge(ans[sz - 1], last);
  }
  else {
    bridge(korzen, last);
  }
  // cout << "PLS" << '\n';
  rep(i, sz - 1) {
    bridge(ans[i], ans[i + 1]);
  }
  // cout << "SKULL" << '\n';
}
void rozw(vector<int> wierzcholki, int korzen) {
  int sz = wierzcholki.size();
  // rep(i, sz) {
  //   cout << wierzcholki[i] << " ";
  // }
  // cout << '\n';
  // cout << "korzen = " << korzen << '\n';
  if (sz == 0) {
    return ;
  }
  if (sz == 1) {
    bridge(wierzcholki[0], korzen);
    return;
  }
  int los = rand() % sz;
  int v = wierzcholki[los];
  vector<int> pom[2002];
  vector<int> sciezka;
  rep(i, sz) {
    if (i == los) continue;
    int w = wierzcholki[i];
    int lca = Query(korzen, v, w);
    if (lca == w) {
      sciezka.pb(w);
    }
    else {
      pom[lca].pb(w);
    }
  }
  posortuj(sciezka, korzen, v);
  rep(i, 2002) {
    int sz = pom[i].size();
    if (sz == 0) {
      continue;
    }
    rozw(pom[i], i);
  }
}
void Solve(int N) {
  vector<int> v;
  int los = rand() % N;
  rep(i, N) {
    if (i == los) continue;
    v.pb(i);
  }
  rozw(v, los);
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |