#include <bits/stdc++.h>
using namespace std;
const int N = 5e5 + 5;
int n, m, book, in[N], flag[N], vis[N];
vector<int> v[N];
queue<int> q;
void dfs(int x, int fa, int last) {
vis[x] = 1;
printf("%d ", x);
if (flag[x] || book) {
for (int i = 0; i < v[x].size() - 1; i++) {
int y = v[x][i];
if (vis[y]) continue;
if (i == v[x].size() - 2) dfs(y, x, v[x][i + 1]);
else {
int t = i + 1;
while (t < v[x].size() - 1 && vis[v[x][t]]) t++;
dfs(y, x, v[x][t]);
}
}
return;
}
int tag = 0, tmp = 0;
for (int i = 0; i < v[x].size() - 1; i++) {
int y = v[x][i];
if (!vis[y]) tmp = y;
if (!vis[y] && !flag[y]) tag = y;
}
if (tag == tmp && last < tag) {
book = 1;
return;
}
for (int i = 0; i < v[x].size() - 1; i++) {
int y = v[x][i];
if (vis[y]) continue;
if (i == v[x].size() - 2) dfs(y, x, v[x][i + 1]);
else {
int t = i + 1;
while (t < v[x].size() - 1 && vis[v[x][t]]) t++;
dfs(y, x, v[x][t]);
}
}
}
int main() {
scanf("%d%d", &n, &m);
for (int i = 1, x, y; i <= m; i++) {
scanf("%d%d", &x, &y);
v[x].push_back(y);
v[y].push_back(x);
in[x]++, in[y]++;
}
for (int i = 1; i <= n; i++) {
if (in[i] == 1) {
flag[i] = 1;
q.push(i);
}
}
while (!q.empty()) {
int x = q.front();
q.pop();
for (int y : v[x]) {
in[y]--;
if (in[y] == 1) {
flag[y] = 1;
q.push(y);
}
}
}
for (int i = 1; i <= n; i++) {
sort(v[i].begin(), v[i].end());
v[i].push_back(0x3f3f3f3f);
}
dfs(1, 0, 0x3f3f3f3f);
return 0;
}