Pagini recente » Cod sursa (job #1941531) | Cod sursa (job #1294128) | Cod sursa (job #155967) | Cod sursa (job #2250812) | Cod sursa (job #1790915)
#include <cstdio>
#include <vector>
#include <stack>
#include <algorithm>
using namespace std;
const int Nmax = 100005;
int N,M;
vector<int> G[ Nmax ],answer;
stack <int> S;
inline int eulerian(){
for(int i = 1; i <= N; ++i)
if(G[i].size() & 1)return 0;
return 1;
}
inline void read()
{
scanf("%d%d",&N,&M);
int a,b;
for(int i=1;i<=M;++i)
{
scanf("%d%d",&a,&b);
G[a].push_back(b);
G[b].push_back(a);
}
}
inline void DFS(int nodc) // dfs iterativ
{
S.push(nodc);
int y;
while(!S.empty())
{
nodc = S.top();
if(!G[nodc].size()) // ne intoarcem in stiva
{
S.pop();
answer.push_back(nodc);
}
else
{
y = G[nodc].back();
G[nodc].pop_back();
S.push(y);
G[y].erase(find(G[y].begin(),G[y].end(),nodc));
}
}
}
int main()
{
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
read();
if(eulerian())
{
DFS(1);
for(int i = 0; i < answer.size() ;++i)
printf("%d ",answer[i]);
}
else
printf("-1");
return 0;
}