Cod sursa(job #643170)

Utilizator d.andreiDiaconeasa Andrei d.andrei Data 3 decembrie 2011 02:37:49
Problema Mesaj4 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <cstdio>
#include <vector>

using namespace std;

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

#define nmax 101000

int N,M;
int a,b,nr,i;
int x[nmax];
int y[nmax];
int viz[nmax];
vector<int> G[nmax];

void dfs(int nod){
	
	if (viz[nod])
		return ;
	
	viz[nod]=1;
	
	vector<int> :: iterator it;
	
	for (it=G[nod].begin();it!=G[nod].end();++it)
		 if (!viz[*it]){
			 	 x[++nr]=nod;
			 y[nr]=*it;
			 dfs(*it);
		 }
}

#define D 8192
char g_buf[D];
int g_p=D-1;


inline int get()
{

	int x=0,neg;
	while ((g_buf[g_p]<'0' || g_buf[g_p]>'9'))
		if (++g_p==D) fread(g_buf,1,D,stdin),g_p=0;
	
	while (g_buf[g_p]>='0' && g_buf[g_p]<='9'){
		x=x*10+g_buf[g_p]-'0';
		if (++g_p==D) fread(g_buf,1,D,stdin),g_p=0;
	}
	return x;
}

int main(){
	
	freopen(file_in,"r",stdin);
	freopen(file_out,"w",stdout);
	
	N=get();
	M=get();
	for (i=1;i<=M;++i){
		a=get();
		b=get();
		
		G[a].push_back(b);
		G[b].push_back(a);
	}
	
	nr=0;
	dfs(1);
	
	if (nr!=N-1){
		printf("-1\n");
		return 0;
	}
	printf("%d\n", 2*N-2);
    for (i=nr;i>=1;--i)	
	   printf("%d %d\n", y[i],x[i]);
	for (i=1;i<=nr;++i)
		 printf("%d %d\n", x[i],y[i]);

	return 0;
	
}