Cod sursa(job #592475)

Utilizator ProtomanAndrei Purice Protoman Data 28 mai 2011 14:40:38
Problema Mesaj4 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <algorithm>
#include <stdio.h>
#include <vector>

#define MAX 100010
#define pb push_back
#define mp make_pair
#define f first
#define s second

using namespace std;

int n, m, viz;
int sel[MAX];
vector <int> vctDrum[MAX];
vector <pair <int, int> > vctSol;

inline void dfs(int nod, int tata)
{
	if (sel[nod])
		return;
	sel[nod] = 1;
	viz++;

	vctSol.pb(mp(nod, tata));

	for (int i = 0; i < vctDrum[nod].size(); i++)
		dfs(vctDrum[nod][i], nod);
}

int main()
{
	freopen("mesaj4.in", "r", stdin);
	freopen("mesaj4.out", "w", stdout);

	scanf("%d %d", &n, &m);

	for (int i = 1; i <= m; i++)
	{
		int n1, n2;
		scanf("%d %d", &n1, &n2);

		vctDrum[n1].pb(n2);
		vctDrum[n2].pb(n1);
	}

	dfs(1, 1);

	if (viz != n)
	{
		printf("%d\n", -1);

		return 0;
	}
	printf("%d\n", 2 * n - 2);
	for (int i = n - 1; i; i--)
		printf("%d %d\n", vctSol[i].f, vctSol[i].s);
	for (int i = 1; i < n; i++)
		printf("%d %d\n", vctSol[i].s, vctSol[i].f);

	fclose(stdin);
	fclose(stdout);
	return 0;
}