#include "meetings.h"
#include <bits/stdc++.h>
using namespace std;
pair<int,int> correct(pair<int,int> p){
	if (p.first>p.second)swap(p.first,p.second);
	return p;
}
set<int> graph[2002];
set<int> possible;
void dfs(int v, int p){
	possible.erase(v);
	for (auto u : graph[v]){
		if (u==p || !possible.count(u))continue;
		dfs(u,v);
	}
}
void Solve(int N){
	set<pair<int,int>> odc;
	int sr=Query(0,1,2);
	for (int i = 0; i<3; i++){
		if (sr!=i){
			graph[sr].insert(i);
			graph[i].insert(sr);
			odc.insert(correct({sr,i}));
		}
	}
	for (int i = 3; i<N; i++){
		if (i==sr)continue;
		possible.clear();
		for (int j = 0; j<i; j++)possible.insert(j);
		possible.insert(sr);
		while(possible.size()>1){
			int v = *possible.begin();
			int u=-1;
			for (int x : graph[v])if (possible.find(x)!=possible.end()){
				u=x;
				break;
			}
			int lca=Query(v,u,i);
			if (lca==i){
				odc.erase(correct({v,u}));
				odc.insert(correct({v,i}));
				odc.insert(correct({u,i}));
				graph[v].erase(u);
				graph[u].erase(v);
				graph[v].insert(i);
				graph[u].insert(i);
				graph[i].insert(v);
				graph[i].insert(u);
				break;
			}
			if (lca==v)dfs(u,v);
			else if (lca==u)dfs(v,u);
			else exit(1);
		}
		if (graph[i].size())continue;
		int v = *possible.begin();
		graph[v].insert(i);
		graph[i].insert(v);
		odc.insert(correct({i,v}));
	}
	for (auto e : odc)Bridge(e.first,e.second);
}
| # | 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... |