Link to this code:
https://cses.fi/paste/edfcdaa8f6234363813f1c//*
The middle of adventure, such a perfect place to start
⣿⣿⣿⣿⣿⣿⣿⢿⠟⢿⣿⣿⣿⣿⠿⠛⠛⠿⢿⣿⣿⣿⣿⠛⣿⢿⣿⣿⣿⣿
⣿⣿⣿⡿⢿⣿⣿⣄⠄⣼⣿⡿⠋⠄⠄⠄⠄⠄⠄⠄⠛⣿⣿⠄⢀⣤⣿⣿⣿⣿
⣿⣿⣷⣤⣸⣿⠛⡛⢛⣿⠋⠄⠄⢀⠄⠄⠄⠄⠄⠄⠄⠘⣿⣿⡿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⡿⠁⠄⠁⠈⠄⠄⠄⠄⣿⡀⠄⠄⠄⠄⠄⠄⠄⠓⠸⠏⠄⢹⣿⣿⣿
⣿⣿⣿⡿⠄⠄⠄⠄⠄⠄⠄⢠⠿⠿⢻⣦⣤⣠⠄⠄⠄⠄⠄⠄⠄⠄⠈⠻⣿⣿
⣿⣿⡿⠁⠄⠄⠄⠄⠈⠄⠄⢸⣿⣿⣿⣿⣿⢭⡛⡀⠄⠄⠨⠄⠄⠄⠄⠄⣿⣿
⣿⣿⠁⠄⠄⠄⠄⠄⠄⠄⠄⠄⠻⣧⡀⣈⣿⣿⠟⠄⠄⠠⢇⠄⠄⠄⠄⠄⣿⣿
⣿⡁⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⢀⢀⣉⡉⠉⠄⠄⠄⠄⠄⠰⠂⠄⠄⠄⠄⢹⣿
⣿⡇⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⣿⠿⠁⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠘⣿
⣿⣿⣶⣤⣤⣄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⣼⣿
*/
#pragma GCC optimize("O3,unroll-loops,inline")
#include<bits/stdc++.h>
using namespace std;
#define IOS cin.tie(nullptr)->sync_with_stdio(0),cin.exceptions(cin.failbit);
#define lb(x) (x)&-(x)
#define INF 5e18
#define I int
#define A auto
#define C char
#define ll long long
#define pii pair<I,I>
#define pll pair<ll,ll>
#define F .first
#define S .second
#define ld long double
#define pdd pair<ld,ld>
#define rep(i,l,r) for(I i = l;i<r;i++)
constexpr I maxN=1e5+5;
namespace cot {
namespace debug {
//#define COT_DEBUG
#ifdef COT_DEBUG
void print() {}
template <class Head, class... Args>
void print(Head&& h, Args&&... args)
{ cerr << h; print(forward<Args>(args)...); }
#define println_value(x) print(#x, " = ", x, '\n')
#else
void print(...) {}
#define println_value(x) print()
#endif
}
}
I n,m,cnt[maxN],in[maxN];
vector<pii> adj[maxN];
vector<I> order;
bitset<maxN*2> vis;
void dfs(I now){
for(int pos,id;!adj[now].empty();){
tie(pos,id)=adj[now].back(),adj[now].pop_back();
if(!vis[id])vis[id]=1,dfs(pos);
}
order.emplace_back(now);
}
int main(){
IOS
cin>>n>>m;
for(I a,b,i=0;i<m;i++)cin>>a>>b,adj[a].emplace_back(b,i),adj[b].emplace_back(a,i),in[a]++,in[b]++;
rep(i,1,n+1)if(in[i]&1)return cout<<"IMPOSSIBLE",0;
dfs(1);
if(order.size()!=m+1||!in[1])return cout<<"IMPOSSIBLE",0;
reverse(order.begin(),order.end());
for(I& i:order)cout<<i<<' ';
}