Cod sursa(job #3323771)

Utilizator Cezar2009Cezar Mihai Titihazan Cezar2009 Data 19 noiembrie 2025 20:09:30
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.59 kb
//https://www.infoarena.ro/problema/ciclueuler

//#pragma GCC optimize ("Ofast")
//#pragma GCC optimize ("fast-math")
//#pragma GCC optimize ("unroll-loops")
//#define _USE_MATH_DEFINES

#include <iostream>
#include <fstream>
#include <vector>
#include <list>
//#include <cstring>
//#include <cmath>
//#include <bitset>
//#include <queue>
#include <stack>
//#include <utility>
#include <algorithm>
//#include <string>
//#include <map>
//#include <unordered_map>
//#include <set>
//#include <unordered_set>
//#include <cstdint>
//#include <climits>
//#include <iomanip>
//#include <cstdio>
//#include <tuple>

using namespace std;

ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");

const int NRMAX = 100000;

list<int> gr[NRMAX + 1];
stack<int> rez;
bool b[NRMAX + 1];

void parcurgere(int i)
{
	while (!gr[i].empty())
	{
		rez.push(i);
		//cout << i << " ";

		int j = gr[i].front();
		auto it = find(gr[j].begin(), gr[j].end(), i);
		gr[j].erase(it);
		gr[i].pop_front();

		i = j;
	}
}

int main()
{
	//ios_base::sync_with_stdio(false);
	//cin.tie(nullptr);
	//cout.tie(nullptr);

	int n, m, i, x, y;

	fin >> n >> m;
	for (i = 1; i <= m; ++i)
	{
		fin >> x >> y;
		gr[x].push_back(y);
		gr[y].push_back(x);
	}

	for (i = 1; i <= n; ++i)
	{
		if (((int)gr[i].size() & 1) && ((int)gr[i].size()))
		{
			fout << "-1";
			return 0;
		}
	}

	i = 1;
	parcurgere(i);
	i = rez.top();
	fout << i << " ";
	rez.pop();

	while (!rez.empty())
	{
		parcurgere(i);
		i = rez.top();
		fout << i << " ";
		rez.pop();
	}

	return 0;
}