Pagini recente » Arhiva de probleme | Arhiva de probleme | Cod sursa (job #1766427) | Cod sursa (job #1766544) | Cod sursa (job #2988051)
#include<fstream>
#include<vector>
#include<algorithm>
#include<queue>
#include<stack>
using namespace std;
ifstream cin("ciclueuler.in");
ofstream cout("ciclueuler.out");
const int NMAX = 2e5 + 1;
vector<pair<int,int>> vecini[NMAX];
int grad[NMAX];
bool folosit[5 * NMAX + 1];
bool u; int sterg;
void euler(int nod)
{
for(auto it : vecini[nod])
{
if(folosit[it.second])
continue;
folosit[it.second] = 1;
euler(it.first);
}
if(nod == sterg)
{
if(!u)
{
cout << nod << " ";
u = true;
}
}
else cout << nod << " ";
}
int main()
{
int n,m,a,b;
cin >> n >> m;
for(int i = 1; i <= m ; i++)
{
cin >> a >> b;
vecini[a].push_back({b,i});
vecini[b].push_back({a,i});
grad[a]++,grad[b]++;
}
bool ok = true;
for(int i = 1; i <= n ; i++) if(grad[i] & 1) ok = false;
if(!ok) cout << -1;
else
{
for(int i = 1; i <= n ; i++) if(grad[i] % 2 == 0)
{
sterg = i; euler(i);
break;
}
}
}