Pagini recente » Cod sursa (job #1066632) | Cod sursa (job #774914) | Cod sursa (job #2358020) | Cod sursa (job #1753987) | Cod sursa (job #2016515)
#include <cstdio>
#include <set>
#include <stack>
#include <vector>
#define DIM 100001
using namespace std;
FILE *fi,*fo;
int n,m;
vector<int> V[DIM],REZ;
pair<int,int> M[5*DIM];
bool VIZ[5*DIM],ok=true;
stack<int> S;
char buff[DIM];
int poz=0;
void citeste(int &numar)
{
numar = 0;
//cat timp caracterul din buffer nu e cifra ignor
while (buff[poz] < '0' || buff[poz] > '9')
//daca am "golit" bufferul atunci il umplu
if (++poz == DIM)
fread(buff,1,DIM,fi),poz=0;
//cat timp dau de o cifra recalculez numarul
while ('0'<=buff[poz] && buff[poz]<='9')
{
numar = numar*10 + buff[poz] - '0';
if (++poz == DIM)
fread(buff,1,DIM,fi),poz=0;
}
}
int main()
{
fi=fopen("ciclueuler.in","r");
fo=fopen("ciclueuler.out","w");
citeste(n);
citeste(m);
for(int i=1;i<=m;i++)
{
int a,b;
citeste(a);
citeste(b);
V[a].push_back(i);
V[b].push_back(i);
M[i]=make_pair(a,b);
}
for(int i=1;i<=n;i++)
if(V[i].size()==0 || V[i].size()%2==1)
ok=false;
if(!ok)
fprintf(fo,"-1");
else
{
S.push(1);
while(!S.empty())
{
int v=S.top();
if(V[v].empty())
{
S.pop();
fprintf(fo,"%d ",v);
}
else
{
int e=V[v].back();
int to=M[e].first;
if(to==v && M[e].first!=M[e].second)
to=M[e].second;
V[v].pop_back();
if(!VIZ[e])
{
S.push(to);
VIZ[e]=true;
}
}
}
}
fclose(fi);
fclose(fo);
return 0;
}