Cod sursa(job #529128)

Utilizator cosmyoPaunel Cosmin cosmyo Data 4 februarie 2011 12:46:51
Problema Mesaj4 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include<cstdio>
#include<vector>
#define x first
#define y second
const int N = 100005;
using namespace std;
int n, m, v[N], nr, term[N];
vector<int> a[N];
pair<int, int> sol[2 * N];
void dfs(int k) {
	int i;
	v[k] = 1;
	for(i = 0 ;i < a[k].size(); ++i)
		if(!v[a[k][i]]) {
			dfs(a[k][i]);
			sol[++nr].x = k;	sol[nr].y = a[k][i];
		}
}

int main() {
	freopen("mesaj4.in", "r", stdin);
	freopen("mesaj4.out", "w", stdout);
	scanf("%d %d", &n, &m);
	int i, X, Y;
	for(i = 1; i <= m; ++i)
		scanf("%d %d", &X, &Y),	a[X].push_back(Y),	a[Y].push_back(X);
	dfs(1);
	int sw = 1;
	
	for(i = 1; i < n; ++i)
		if(v[i] == 0) {
			sw = 0;
			break;
		}
	
	if(!sw) 
		printf("-1\n");
	else {
		printf("%d\n", 2 * (n - 1));
		for(i = 1;i <= nr; ++i)
			printf("%d %d\n", sol[i].y, sol[i].x);
		for(i = nr; i >= 1; --i)
			printf("%d %d\n", sol[i].x, sol[i].y);
	}

	return 0;
}