Pagini recente » Cod sursa (job #2469219) | Cod sursa (job #2346124) | Cod sursa (job #2317253) | Cod sursa (job #2928083) | Cod sursa (job #1604988)
#include <fstream>
#include <vector>
#include <stack>
#include <algorithm>
using namespace std;
ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");
int n , m , x , y , g[100001] , nod , urmNod ;
stack<int> s;
vector<int> G[100001];
vector<int> ans;
bool viz[100001];
void dfs(int nod)
{
viz[nod] = true;
for(auto it = G[nod].begin(); it != G[nod].end(); ++it)
if(!viz[*it])
dfs(*it);
}
bool conex()
{
dfs(1);
for(int i = 1; i <= n; ++i)
if(!viz[i])
return false;
return true;
}
int main()
{
in >> n >> m;
for(int i = 1; i <= m; ++i)
{
in >> x >> y;
G[x].push_back(y);
G[y].push_back(x);
g[x]++ , g[y]++;
}
bool flag = false;
for(int i = 1; i <= n; ++i) if(g[i] % 2) flag = true , i = n + 1;
if(!flag && conex())
{
s.push(1);
while(!s.empty())
{
nod = s.top();
if(G[nod].size())
{
urmNod = G[nod].back();
s.push(urmNod);
G[nod].pop_back();
G[urmNod].erase(find(G[urmNod].begin() , G[urmNod].end() , nod));
}
else
{
nod = s.top();
ans.push_back(nod);
s.pop();
}
}
flag = false;
for(auto it = ans.begin(); it != ans.end(); ++it)
{
if(flag == false) flag = true;
else out << *it << " ";
}
}
else
out << "-1 ";
return 0;
}