#include <iostream>
#include <vector>
#include "island.h"
using namespace std;
const int M = 405;
int Dfs[M], seen2[M], Edge[M][M], cur;
void dfs2(int u, int stp){
	for (int i=1;i<M;i++)
		if (Edge[u][i])
			seen2[i] = cur;
	if (Dfs[u])
		return;
	Dfs[u] = 1;
	// cout<<u<<endl;
	for (int k=1;k;k++){
		int v = query(u, k);
		if (v == stp)
			return;
		seen2[v] = cur;
		// if (u == 4 and v == 3)
		// 	cout<<"tuck"<<endl;
		// cout<<"        "<<v<<endl;
		Edge[u][v] = Edge[v][u] = 1;
	}
}
void dfs1(int u){
	cur++;
	Dfs[u] = 1;
	// cout<<u<<" ->\n";
	for (int k=1;k<u;k++){
		int v = query(u, k);
		if (seen2[v] == cur or v > u)
			break;
		// cout<<"    "<<v<<endl;
		Edge[u][v] = Edge[v][u] = 1;
		dfs2(v, u);
	}
}
void solve(int n, int l){
	for (int i=n;i>=1;i--){
		if (Dfs[i] == 0){
			dfs1(i);
			continue;
		}
		for (int j=1;j<=n;j++){
			if (Edge[i][j])
				dfs2(j, i);
		}
	}
	for (int i=1;i<=n;i++){
		for (int j=i+1;j<=n;j++)
			if (Edge[i][j]){
				answer(i, j);
				// cout<<i<<"            "<<j<<endl;
			}
	}
}
| # | 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... | 
| # | 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... |