Pagini recente » Cod sursa (job #2969675) | Cod sursa (job #887986) | Cod sursa (job #2083378) | Cod sursa (job #2926415) | Cod sursa (job #1250211)
# include <cstdio>
# include <vector>
# define pb push_back
# define N 100010
# define M 500010
using namespace std;
vector <int> G[N];
vector <int> st;
vector <int> :: iterator it;
int n,m,v[N],i;
void load()
{
int x,y;
scanf("%d %d\n", &n, &m);
while(m--)
{
scanf("%d %d\n", &x, &y);
G[x].pb(y);
G[y].pb(x);
}
}
bool verif()
{
int i;
for(i=1; i<=n; ++i)
if((G[i].size())%2!=0) return false;
return true;
}
vector <int> :: iterator find(int x, int nod)
{
vector <int> :: iterator it;
for(it=G[nod].begin(); it!=G[nod].end(); ++it)
if((*it)==x) return it;
}
void euler(int x)
{
int i,nod;
for(vector <int> :: iterator it=G[x].begin(); it!=G[x].end() && !G[x].empty(); ++it)
{
nod=(*it);
G[x].erase(it);
G[nod].erase(find(x, nod));
st.pb(nod);
euler(nod);
}
if(G[x].empty())
{
v[++v[0]]=x;
st.pop_back();
}
}
int main()
{
freopen("ciclueuler.in", "r", stdin);
freopen("ciclueuler.out", "w", stdout);
load();
if(verif()) euler(1);
else printf("-1\n");
for(i=1; i<v[0]; ++i)
printf("%d ", v[i]);
fclose(stdin);
fclose(stdout);
return 0;
}