#include<bits/stdc++.h>
#include "island.h"
using namespace std;
int n;
vector<bool> vis;
vector<vector<int>> adj;
// vector<vector<int>> dis;
void dfs(int node, int prev) {
if(vis[node]) return;
vis[node]=true;
// cerr << node << ' ' << prev << endl;
for(int q=1; q<n; q++) {
int child=query(node, q);
// cerr << node << ' ' << child << ' ' << q << endl;
if(child == prev) continue;
if(vis[child]) continue;
// cerr << node << ' ' << prev << ' ' << child << ' ' << q << endl;
if(q >= 2) {
if(prev != -1) {
for(int i=1; i<n; i++) {
int newChild=query(child, i);
if(newChild == node) {
break;
} else if(newChild == prev) {
// adj[prev].push_back(child);
// dfs(child, prev);
return;
} else {
// adj[child].push_back(newChild);
// dfs(newChild, child);
}
}
}
}
adj[node].push_back(child);
dfs(child, node);
}
}
void solve(int N, int L) {
n=N;
// dis=vector<vector<int>>(N+1, vector<int>(N+1, 0));
adj=vector<vector<int>>(N+1);
vis=vector<bool>(N+1, false);
dfs(1, -1);
vector<pair<int, int>> ans;
for(int i=1; i<=N; i++) {
for(int j=0; j<adj[i].size(); j++) ans.push_back({min(i, adj[i][j]), max(i, adj[i][j])});
}
// cerr << endl;
sort(ans.begin(), ans.end());
for(int i=0; i<ans.size(); i++) {
if(i != 0 && ans[i] == ans[i-1]) continue;
// cerr << ans[i].first << ' ' << ans[i].second << endl;
answer(ans[i].first, ans[i].second);
}
}