Pagini recente » Cod sursa (job #2511335) | Cod sursa (job #2665346) | Cod sursa (job #2653412) | Cod sursa (job #1316028) | Cod sursa (job #3203452)
#include <iostream>
#include <fstream>
#include <stack>
#include <vector>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
vector<vector<pair<int,int>>>ma;
stack<int> st;
stack<int> nodu;
vector<bool> vf;
/*void dfs(int nod)
{
for(int k=ma[nod][0].second;k<=ma[nod][0].first;k++)
{
if(vf[ma[nod][k].first]==false)
{
vf[ma[nod][k].first]=true;
dfs(ma[nod][k].second);
}
}
st.push(nod);
}*/
int main()
{
int n,m;
fin>>n>>m;
vector<pair<int,int>> v;
v.push_back({0,1});
ma.resize(n+1,v);
vf.resize(m+1,false);
pair<int,int> el;
for(int k=1;k<=m;k++)
{
fin>>el.first>>el.second;
ma[el.first].push_back({k,el.second});
ma[el.second].push_back({k,el.first});
ma[el.first][0].first++;
ma[el.second][0].first++;
}
for(int k=1;k<=n;k++)
{
if(ma[k][0].first%2==1)
{
fout<<-1;
return 0;
}
}
int c=1;
while(ma[c][0].first==0)
c++;
nodu.push(c);
vector<pair<int,int>>::iterator k;
///cout<<((ma[3].end()-1)->first)<<" "<<((ma[3].end()-1)->second)<<endl;
while(!nodu.empty())
{
k=ma[nodu.top()].end()-1;
if(k!=ma[nodu.top()].begin())
{
if(vf[(*k).first]==false)
{
ma[nodu.top()].pop_back();
nodu.push((*k).second);
vf[(*k).first]=true;
}
else
ma[nodu.top()].pop_back();
}
else
{
st.push(nodu.top());
nodu.pop();
}
}
for(int k=1;k<=m;k++)
{
if(vf[k]==false)
{
fout<<-1;
return 0;
}
}
while(!st.empty())
{
fout<<st.top()<<' ';
st.pop();
}
return 0;
}