Cod sursa(job #600690)

Utilizator crushackPopescu Silviu crushack Data 2 iulie 2011 20:31:42
Problema Mesaj4 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <stdio.h>
#include <vector>
#define NMax 100010
using namespace std;

const char IN[]="mesaj4.in",OUT[]="mesaj4.out";

int N,M;
bool visit[NMax] , visit2[NMax];
vector<int> ad[NMax];
vector<pair<int,int> > sol;

void bfs(int x=1)
{
	visit[x]=true;
	for ( typeof(ad[x].begin()) it=ad[x].begin();it<ad[x].end();++it)
		if (!visit[*it])
		{
			bfs(*it);
			//printf("%d %d\n",*it,x);
			sol.push_back(make_pair(*it,x));
		}
}

int main()
{
	int x,y;
	freopen(IN,"r",stdin);
	scanf("%d%d",&N,&M);
	while (M--)
	{
		scanf("%d%d",&x,&y);
		ad[x].push_back(y);
		ad[y].push_back(x);
	}
	fclose(stdin);
	
	bfs();
	
	freopen(OUT,"w",stdout);
	for (int i=1;i<=N;++i)
		if (!visit[i])
		{
			printf("-1\n");
			return 0;
		}
	
	printf("%d\n",2*N-2);
	
	for ( typeof(sol.begin()) it= sol.begin(); it<sol.end();++it)
		printf("%d %d\n",it->first,it->second);
	for ( typeof(sol.rbegin()) it= sol.rbegin(); it<sol.	rend();++it)
		printf("%d %d\n",it->second,it->first);
	fclose(stdout);
	
	return 0;
}