Pagini recente » Cod sursa (job #2195637) | Cod sursa (job #876525) | Cod sursa (job #1663702) | Cod sursa (job #1565274) | Cod sursa (job #1818272)
#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];
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(){
//FILE*fi,*fo;
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{
ciclu(1);
}
fclose(fi);
fclose(fo);
return 0;
}