#include <iostream>
#include <cstring>
#include <vector>
#include <queue>
using namespace std;
constexpr int N = 5e3 + 5;
int n, m, vis[N], tmp[N];
vector<int> g[N], ans;
void special(int u, int fa) {
vis[u] = 1;
ans.emplace_back(u);
priority_queue<int, vector<int>, greater<int>> q;
for (int l = 0; l < g[u].size(); ++l) {
int i = g[u][l];
if (i != fa && !vis[i]) q.push(i);
}
while (!q.empty()) {
int v = q.top();
q.pop();
special(v, u);
}
}
inline vector<int> min(vector<int> a, vector<int> b) {
if (a.size() != b.size()) return b;
for (int i = 0; i < n; ++i)
if (a[i] < b[i]) return a;
else if (a[i] > b[i]) return b;
return a;
}
int U[N], V[N];
inline void init(int id) {
for (int i = 1; i <= n; ++i)
g[i].clear();
for (int i = 1; i <= m; ++i) {
if (i == id) continue;
int u = U[i], v = V[i];
g[u].emplace_back(v);
g[v].emplace_back(u);
}
}
signed main() {
scanf("%d%d", &n, &m);
for (int i = 1; i <= m; ++i) {
int u, v;
scanf("%d%d", &u, &v);
U[i] = u, V[i] = v;
}
if (m == n - 1) {
init(0);
special(1, 0);
for (int i = 0; i < n; ++i)
printf("%d ", ans[i]);
return 0;
}
vector<int> res;
for (int i = 0; i < n; ++i)
res.emplace_back(0x3f3f3f3f);
for (int i = 1; i <= m; ++i) {
ans.clear();
init(i);
memset(vis, 0, sizeof(vis));
special(1, 0);
res = min(ans, res);
}
for (int i = 0; i < n; ++i)
printf("%d ", res[i]);
return 0;
}