Cod sursa(job #2540454)

Utilizator giotoPopescu Ioan gioto Data 7 februarie 2020 10:22:40
Problema Mesaj4 Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.68 kb
#include <bits/stdc++.h>
using namespace std;

class InParser {
private:
	FILE *fin;
	char *buff;
	int sp;
 
	char read_ch() {
		++sp;
		if (sp == 4096) {
			sp = 0;
			fread(buff, 1, 4096, fin);
		}
		return buff[sp];
	}
 
public:
	InParser(const char* nume) {
		fin = fopen(nume, "r");
		buff = new char[4096]();
		sp = 4095;
	}
	
	InParser& operator >> (int &n) {
		char c;
		while (!isdigit(c = read_ch()) && c != '-');
		int sgn = 1;
		if (c == '-') {
			n = 0;
			sgn = -1;
		} else {
			n = c - '0';
		}
		while (isdigit(c = read_ch())) {
			n = 10 * n + c - '0';
		}
		n *= sgn;
		return *this;
	}
	
	InParser& operator >> (long long &n) {
		char c;
		n = 0;
		while (!isdigit(c = read_ch()) && c != '-');
		long long sgn = 1;
		if (c == '-') {
			n = 0;
			sgn = -1;
		} else {
			n = c - '0';
		}
		while (isdigit(c = read_ch())) {
			n = 10 * n + c - '0';
		}
		n *= sgn;
		return *this;
	}
};

int n, m, NR;
int TT[100005];
bool viz[100005];

vector <int> v[100005];
vector <pair <int, int> > aux;

vector <int> parc;
void dfs(int nod){
	viz[nod] = 1; --NR;
	for(auto it : v[nod]){
		if(viz[it]) continue ;
		TT[it] = nod;
		dfs(it);
	}
	parc.push_back(nod);
}

int main(){
	InParser mapispelimitelevoastre("mesaj4.in");
	freopen("mesaj4.out", "w", stdout);
	
	mapispelimitelevoastre >> n >> m;
	int x, y;
	for(int i = 1; i <= m ; ++i){
		mapispelimitelevoastre >> x >> y;
		v[x].push_back(y);
		v[y].push_back(x);
	}
	
	NR = n;
	dfs(1);
	
	if(NR) {printf("-1"); return 0;}
	
	printf("%d\n", 2 * n - 2);
	parc.pop_back();
	for(int i = 0; i < parc.size() ; ++i)
		printf("%d %d\n", parc[i], TT[parc[i]]);
	
	for(int i = parc.size() - 1; i >= 0 ; --i)
		printf("%d %d\n", TT[parc[i]], parc[i]);
	
	return 0;
}