#include "fun.h"
// author: yanybayev
#include "bits/stdc++.h"
using namespace std;
#define ff first
#define ss second
#define pp pop_back
#define ll long long
#define pb push_back
#define ls(v) (int)v.size()
#define all(v) v.begin(),v.end()
#define rall(v) v.rbegin(),v.rend()
#define wr cout << "------------------------" << endl
const int MAXN = 505;
vector<int> g[MAXN];
int dist[MAXN];
int vis[MAXN];
int dp[MAXN][MAXN];
int best[MAXN];
vector<int> createFunTour(int N, int Q) {
for (int i = 0;i<N;++i) {
for (int j = i + 1;j<N;++j) {
if (hoursRequired(i, j) == 1) {
g[i].pb(j);
g[j].pb(i);
}
}
}
auto dfs = [&] (auto &&self, int nd, int D) -> void {
dist[nd] = D;
vis[nd] = 1;
for (auto it : g[nd]) if(!vis[it]) self(self, it, D + 1);
};
int root = 0;
for (int i = 0;i<N;++i) {
fill(dist, dist + N, 0);
fill(vis, vis + N, 0);
dfs(dfs, i, 0);
for (int j = 0;j<N;++j) {
dp[i][j] = dist[j];
best[i] = max(best[i], dp[i][j]);
}
if (best[root] < best[i]) root = i;
}
vector<int> ans;
fill(vis, vis + N, 0);
auto construct = [&] (auto &&self, int nd) -> void {
vis[nd] = 1;
ans.pb(nd);
int st = -1;
for (int i = 0;i<N;++i) {
if (!vis[i] and (st == -1 or dp[nd][i] > dp[nd][st])) st = i;
}
if (~st) self(self, st);
};
construct(construct, root);
return ans;
}