Cod sursa(job #320554)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 4 iunie 2009 23:31:32
Problema Ciclu Eulerian Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <cstdio>
#include <vector>

using namespace std;

#define file_in "ciclueuler.in"
#define file_out "ciclueuler.out"

#define Nmax 100100
#define pb push_back

vector<int> v[Nmax];
vector<int> g[Nmax];
int gr[Nmax];
int viz[5*Nmax];
int n,m;
int nr1=0;

void dfs(int nod)
{
	int i;
	for (i=0;i<v[nod].size();++i)
		 if (!viz[v[nod][i]])
		 {
			 viz[v[nod][i]]=1;
			 dfs(g[nod][i]);
		 }
	printf("%d ", nod);
}	

void citire()
{
	int i,x,y;
	freopen(file_in,"r",stdin);
	freopen(file_out,"w",stdout);
	
	scanf("%d %d", &n,&m);
	for (i=1;i<=m;++i)
	{
		scanf("%d %d", &x,&y);
		gr[x]++;
		gr[y]++;
		g[x].pb(y);
		g[y].pb(x);
		v[x].pb(i);
		v[y].pb(i);
		if (x==1 && y==2) nr1++; 
			//printf("%d %d\n", x,y);
	}
}

int main()
{
	int i;
	citire();
	
	for (i=1;i<=n;++i)
		 if (gr[i]%2==1)
		 {
			 printf("-1");
			 
			 fclose(stdin);
			 fclose(stdout);
			 
			 return 0;
		 }
	/*if (nr1==0) 
	{
		printf("1");
		
		fclose(stdin);
	    fclose(stdout);
			 
			 return 0;
	}*/
		
	 dfs(1);
	//	 printf("%d", nr1);
	
	fclose(stdin);
	fclose(stdout);
	
	return 0;
}