# pragma GCC optimize("O3")
# include <bits/stdc++.h>
# define maxn 100001
# define ll long long
# define clock (clock() * 1000.0 / CLOCKS_PER_SEC)
# define rc(s) return cout << s,0
# define _ ios_base::sync_with_stdio(false);cin.tie(0);cerr.tie(0);cout.tie(0);
# define pb push_back
# define mp make_pair
//# define int ll
using namespace std;
vector<pair<int,int>>vec[maxn];
int n,m,x,y;
vector<int>ans;
bool viz[maxn * 5];
void dfs(int nod)
{
for(auto it : vec[nod])
{
if(!viz[it.second])
{
viz[it.second] = 1;
dfs(it.first);
}
}
ans.pb(nod);
}
int32_t main(){_
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
cin >> n >> m;
for(int i = 1;i <= m;i++)
{
cin >> x >> y;
vec[x].pb(mp(y,i));
vec[y].pb(mp(x,i));
}
for(int i = 1;i <= n;i++)
if((int)vec[i].size() & 1) rc(-1);
dfs(1);
for(auto it : ans) cout << it << ' ';
}