Pagini recente » Cod sursa (job #1806053) | soldiers | Cod sursa (job #2415131) | Cod sursa (job #426041) | Cod sursa (job #2492799)
#include<cstdio>
#include<vector>
#include<cstring>
#include<cctype>
const int MMAX = 500000;
const int NMAX = 100000;
FILE*fin,*fout;
struct muchie
{
int x , y;
bool exist;
};
muchie muchii[2 * MMAX + 1];
bool viz[NMAX + 1];
int vecini[NMAX + 1];
int total = 0;
std :: vector<int>v[NMAX + 1];
std :: vector<int>q;
const int SIZE=1<<15;
char buffer[SIZE];
int point=SIZE;
inline char adv(){
if(point==SIZE){
fread(buffer,1,SIZE,fin);
point=0;
}
return buffer[point++];
}
inline int read(){
char c;
int x=0,sgn=1;
c=adv();
while(isdigit(c)==false && c!='-')
c=adv();
while(c=='-'){
sgn*=-1;
c=adv();
}
while(isdigit(c)){
x=x*10+c-'0';
c=adv();
}
return x*sgn;
}
void dfs(int nod)
{
if(viz[nod] == 0){
viz[nod] = 1;
total ++;
}
for(int i = 0; i < v[nod].size() ; i ++)
{
if(muchii[ v[nod][i] ].exist == 1)
{
muchii[ v[nod][i] ].exist = 0;
if(muchii[ v[nod][i] ].x == nod)
dfs(muchii[ v[nod][i] ].y);
else
dfs(muchii[ v[nod][i] ].x);
}
}
q.push_back(nod);
}
int main()
{
int n , m , x , y , k = 0;
fin=fopen("ciclueuler.in","r");
fout=fopen("ciclueuler.out","w");
n = read();
m = read();
for(int i = 1; i <= m ; i ++)
{
x= read();
y = read();
muchii[++k] = {x , y , 1};
v[x].push_back(k);
v[y].push_back(k);
vecini[x] ++;
vecini[y] ++;
}
dfs(1);
for(int i = 1; i <= n ; i ++)
if(vecini[i] % 2 == 1){
total = n - 1;
break;
}
if(total != n){
fprintf(fout , "-1");
return 0;
}
for(int i = m ; i > 0 ; i --)
{
fprintf(fout , "%d " , q[i]);
}
return 0;
}