#include <bits/stdc++.h>
#define all(x) (x).begin(), (x).end()
using namespace std;
using ll = long long;
const ll inf = 1e18;
bool are_connected(vector<int> A, vector<int> B);
pair<int, int> diam(vector<vector<int>>& g){
int n = g.size();
int maxa = 0;
int ans = 0;
for (int i = 0; i<n; i++){
vector<int> vis(n);
auto dfs = [&] (auto&& self, int u, int dist) -> void {
if (dist>maxa){
maxa = dist;
ans = i;
}
vis[u] = 1;
for (int e: g[u]){
if (!vis[e]) {
self(self, e, dist+1);
}
}
};
dfs(dfs, i, 0);
}
return {ans, maxa};
}
vector<int> path(vector<vector<int>>& g, int x, int maxa){
vector<int> p;
bool found = false;
vector<int> vis(g.size());
auto dfs = [&] (auto&& self, int u, int dist) -> void {
if (found) return;
p.push_back(u);
vis[u] = 1;
if (dist==maxa){
found = true;
return;
}
for (int e: g[u]){
if (!vis[e]){
self(self, e, dist+1);
}
}
if (!found) p.pop_back();
};
dfs(dfs, x, 0);
return p;
}
vector<int> longest_trip(int N, int D) {
if (D>=1){
vector<vector<int>> g(N+1);
for (int i = 0; i<N; i++){
for (int j = i+1; j<N; j++){
if (are_connected({i}, {j})) {
g[i].push_back(j);
g[j].push_back(i);
}
}
}
auto [s, len] = diam(g);
vector<int> p = path(g, s, len);
return p;
}
}
// int main(){
// int x = max_score(4, 0, 3, 20, {0, 1, 2}, {1, 2, 3}, {18, 1, 19});
// cout<<x;
// }