Pagini recente » Cod sursa (job #2804619) | Cod sursa (job #2861646) | Cod sursa (job #2493170) | Cod sursa (job #2036050) | Cod sursa (job #1818285)
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#define BUF_SIZE 1<<17
char buf[BUF_SIZE];
int pbuf=BUF_SIZE;
FILE*fi,*fo;
inline char nextch(){
if(pbuf==BUF_SIZE){
fread(buf, BUF_SIZE, 1, fi);
pbuf=0;
}
return buf[pbuf++];
}
inline long long nextnum(){
long long a=0;
char c=nextch();
while((c<'0' || c>'9') && c!='-')
c=nextch();
int semn=1;
if(c=='-'){
semn=-1;
c=nextch();
}
while('0'<=c && c<='9'){
a=a*10+c-'0';
c=nextch();
}
return a*semn;
}
#define MAXN 100000
#define MAXM 500000
struct Edge{
int a, b;
int valid;
} M[1+MAXM];
std::vector <int> G[1+MAXN];
int gr[1+MAXN];
int stiva[1+MAXN], last[1+MAXN];
void ciclu(int node){
for(int i=0;i<G[node].size();i++)
if(M[G[node][i]].valid){
M[G[node][i]].valid=0;
if(M[G[node][i]].a==node)
ciclu(M[G[node][i]].b);
else
ciclu(M[G[node][i]].a);
}
fprintf(fo,"%d ", node);
}
int main(){
fi=fopen("ciclueuler.in","r");
fo=fopen("ciclueuler.out","w");
int n=nextnum(), m=nextnum();
for(int i=1;i<=m;i++){
M[i].a=nextnum();
M[i].b=nextnum();
M[i].valid=1;
gr[M[i].a]++;
gr[M[i].b]++;
G[M[i].a].push_back(i);
G[M[i].b].push_back(i);
}
int eulerian=1;
for(int i=1;i<=n;i++)
if(gr[i]%2==1)
eulerian=0;
if(!eulerian)
fprintf(fo,"-1");
else{
stiva[1]=1;
int u=1;
while(u>0){
while(last[stiva[u]]<G[stiva[u]].size() && M[G[stiva[u]][last[stiva[u]]]].valid==0)
last[stiva[u]]++;
if(last[stiva[u]]==G[stiva[u]].size()){
fprintf(fo,"%d ", stiva[u]);
u--;
}
else{
M[G[stiva[u]][last[stiva[u]]]].valid=0;
if(M[G[stiva[u]][last[stiva[u]]]].a==stiva[u])
stiva[u+1]=M[G[stiva[u]][last[stiva[u]]]].b;
else
stiva[u+1]=M[G[stiva[u]][last[stiva[u]]]].a;
u++;
}
}
}
fclose(fi);
fclose(fo);
return 0;
}