Pagini recente » Cod sursa (job #2191572) | Cod sursa (job #2274182) | Cod sursa (job #2654741) | Cod sursa (job #2858006) | Cod sursa (job #1134651)
#include <fstream>
#include <vector>
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
const int N=101001;
struct muchii {
int x,y;
} v[N*5];
int n,m;
vector <int> a[N];
bool folosit[5*N],viz[N];
void citire() {
f>>n>>m;
for(int i=1; i<=m; i++) {
f>>v[i].x>>v[i].y;
a[v[i].x].push_back(i);
a[v[i].y].push_back(i);
}
}
void euler(int x) {
int y,ind;
for(int i=0; i<a[x].size(); i++) {
ind=a[x][i];
if(folosit[ind]) continue;
y=v[ind].y;
if(y==x) y=v[ind].x;
folosit[ind] = true;
euler(y);
}
g<<x<<" ";
}
bool pare()
{
for(int i=1;i<=n;i++)
if(a[i].size()%2==1) return 0;
return 1;
}
void dfs(int x)
{
int ind, y;
viz[x]=true;
for(int i=0;i<a[x].size();i++)
{
ind = a[x][i];
y = v[ind].x;
if (x == y) y = v[ind].y;
if(!viz[y]) dfs(y);
}
}
bool conex()
{
for(int i=1;i<=n;i++)
if(viz[i]==false) return 0;
return 1;
}
int main() {
int ok=1;
citire();
dfs(1);
if (conex() && pare())
ok = 1;
else
ok = 0;
if(ok==1) euler(1);
else g << "-1\n";
return 0;
}