#include<fstream>
#include<stack>
#include<vector>
#include<bitset>
using namespace std;
#define NMAX 100005
#define MMAX 500005
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
vector < pair <int,int> > L[NMAX];
vector < pair <int,int> >::reverse_iterator it;
bitset <MMAX> viz;
bitset <NMAX> v;
stack <int> S;
int n,m,x,y,z,start,first,D[NMAX];
void dfs(int s)
{
v[s]=1;
for (int i=0;i<L[s].size();++i)
if (!v[L[s][i].first])
dfs(L[s][i].first);
}
int main()
{
int i;
fin>>n>>m;
for (i=1;i<=m;++i)
{
fin>>x>>y;
L[x].push_back(make_pair(y,i));
L[y].push_back(make_pair(x,i));
++D[x], ++D[y];
}
for (i=1;i<=n;++i)
if (D[i])
{
dfs(i);
start=i;
break;
}
for (i=1;i<=n;++i)
if ((D[i] && !v[i]) || D[i]%2)
{
fout<<"-1\n";
return 0;
}
first=1;
S.push(start);
while (!S.empty())
{
x=S.top();
while (!L[x].empty()) {
it = L[x].rbegin();
y=it->first, z=it->second;
if (viz[z])
{
L[x].erase(L[x].end()-1);
}
else
break;
}
if (L[x].empty()) {
if (!first)
fout<<x<<" ";
first=0;
S.pop();
continue;
}
viz[z] = 1;
S.push(y);
}
return 0;
}