Pagini recente » Cod sursa (job #500552) | Cod sursa (job #2781213) | Cod sursa (job #3169115) | Cod sursa (job #2593057) | Cod sursa (job #2131778)
#include <cstdio>
#include <vector>
#define nmax 100005
using namespace std;
FILE *f=fopen("ciclueuler.in","r");
FILE *g=fopen("ciclueuler.out","w");
struct str
{
int nod,indic;
};
vector<str>Q[nmax];
vector<int>Stk;
int n,m,stkcount,grad[nmax],sters[nmax*5];
void read()
{
fscanf(f,"%d %d",&n,&m);
for (int i=1; i<=m; ++i)
{
int e1,e2;
fscanf(f,"%d %d",&e1,&e2);
Q[e1].push_back({e2,i});
Q[e2].push_back({e1,i});
++grad[e1];
++grad[e2];
}
}
bool verify()
{
for (int i=1; i<=n; ++i)
if (grad[i]&1)
return 0;
return 1;
}
void solve()
{
Stk.push_back(1);
while (!Stk.empty())
{
int nod=Stk.back();
while (!Q[nod].empty()&&sters[Q[nod].back().indic])
Q[nod].pop_back();
if (Q[nod].empty())
{
if (Stk.size()>1)
fprintf(g,"%d ",nod);
Stk.pop_back();
}
else
{
int nextnod=Q[nod].back().nod;
int nextindic=Q[nod].back().indic;
sters[nextindic]=1;
Q[nod].pop_back();
Stk.push_back(nextnod);
}
}
}
int main()
{
read();
if (verify())
solve();
else
{
fprintf(g,"-1");
return 0;
}
fclose(f);
fclose(g);
return 0;
}