#include "meetings.h"
#include<bits/stdc++.h>
#pragma GCC optimize("Ofast,inline,unroll-loops")
#define rep(a,b,c) for(ll a=b;a<=c;++a)
#define per(a,b,c) for(ll a=b;a>=c;--a)
#define ll long long
#define ff first
#define ss second
#define mp make_pair
using namespace std;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
static mt19937 rng((ll)time(nullptr));
const ll N=2005,inf=1e18;
ll n;
void bridge(ll u,ll v){
if(u>v) swap(u,v);
Bridge(u,v);
}
void DC(vector<ll> &T){
if(T.size()<=1) return ;
//shuffle(T.begin(),T.end(),rng);
ll s=T.front(),t=T.back();
vector<ll> path,sub[N];
path.push_back(s),path.push_back(t);
sub[s].push_back(s),sub[t].push_back(t);
for(ll u:T){
if(u==s||u==t) continue;
ll res=Query(s,t,u);
if(res==u) path.push_back(u);
sub[res].push_back(u);
}
stable_sort(path.begin(),path.end(),[&](ll a,ll b){
if(a==s) return true;
if(b==s) return false;
return Query(s,a,b)==a;
});
rep(i,0,(ll)path.size()-2) bridge(path[i],path[i+1]);
for(ll u:path) DC(sub[u]),vector<ll>().swap(sub[u]);
}
void Solve(int NN){
n=NN;
vector<ll> T;
rep(i,0,n-1) T.push_back(i);
DC(T);
}