#include <bits/stdc++.h>
#define pb push_back
using namespace std ;
const int NMAX = 100005 ;
const int MMAX = 500005 ;
ifstream in ("ciclueuler.in") ;
ofstream out ("ciclueuler.out") ;
int x , y , n , m , i , from [ MMAX ] , to [ MMAX ] , nod , edge ;
bool viz [ MMAX ] ;
vector < int > v [ NMAX ] , st , ans ;
int main() {
in >> n >> m ;
for ( i = 0 ; i < m ; ++ i ) {
in >> x >> y ;
v [ x ].pb ( i ) ;
v [ y ].pb ( i ) ;
from [ i ] = x ;
to [ i ] = y ;
}
for ( i = 1 ; i <= n ; ++ i )
if ( v [ i ].size() % 2 ) return out << -1 , 0 ;
st.push_back ( 1 ) ;
while ( !st.empty() ) {
nod = st.back() ;
if ( !v[ nod ].empty() ) {
edge = v [ nod ].back () ;
v [ nod ].pop_back() ;
if ( !viz [ edge ] ) {
viz [ edge ] = 1 ;
st.push_back( to [ edge ] ^ from [ edge ] ^ nod ) ;
}
} else {
st.pop_back() ;
ans.push_back(nod) ;
}
}
for ( i = 1 ; i < ans.size() ; ++ i ) out << ans [ i ] << ' ' ;
}