Pagini recente » Cod sursa (job #1083896) | Cod sursa (job #1326809) | Cod sursa (job #1957772) | Cod sursa (job #1197398) | Cod sursa (job #3257780)
#include <bits/stdc++.h>
#define VMAX 100000
#define NMAX 100200
#define LOG 17
#define INF (long long)(1e9)
#define MOD 1999999973
#define BASE 23
#define ll long long int
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
vector<pair<int,int>> adj[NMAX+1];
bool vis[5*NMAX+1];
vector<int> eulerCycle;
void conex(int x)
{
vis[x]=1;
for(auto e : adj[x])
{
if(!vis[e.first])
{
conex(e.first);
}
}
}
int deg[NMAX+1];
int main()
{
int n,m;
fin >> n >> m;
for(int i=1;i<=m;i++)
{
int x,y;
fin >> x >> y;
deg[x]++;
deg[y]++;
adj[x].push_back({y,i});
adj[y].push_back({x,i});
}
conex(1);
bool ok=1;
for(int i=1;i<=n;i++)
{
ok &= deg[i]%2==0;
ok &= vis[i];
}
if(!ok)
{
fout << -1;
return 0;
}
memset(vis,0,sizeof(vis));
stack<int> S;
S.push(1);
while(!S.empty())
{
int x = S.top();
if(adj[x].empty())
{
eulerCycle.push_back(x);
S.pop();
}
else
{
int y = adj[x].back().first;
int id = adj[x].back().second;
if(!vis[id])
{
vis[id]=1;
S.push(y);
}
adj[x].pop_back();
}
}
for(int i=0;i<eulerCycle.size()-1;i++)
{
fout << eulerCycle[i] << " ";
}
}