Pagini recente » Cod sursa (job #3145318) | Cod sursa (job #282791) | Cod sursa (job #1607963) | Cod sursa (job #2562906) | Cod sursa (job #2355311)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
const int VAL=500005;
int N, M, i, j, A[VAL], B[VAL], st[VAL], top;
bool viz[VAL], gasit;
vector <int> G[VAL];
vector <int> :: iterator it;
void Ciclu_Euler()
{
if (top==M)
{
fout << M+1 << '\n';
for (int i=1; i<=top; i++)
fout << st[i] << " ";
fout << st[1];
gasit=true;
return;
}
int nod=st[top];
vector <int> :: iterator it;
for (it=G[nod].begin(); it!=G[nod].end(); it++)
{
if (viz[*it]==false)
{
viz[*it]=true;
if (A[*it]==nod)
{
st[++top]=B[*it];
Ciclu_Euler();
}
else
{
st[++top]=A[*it];
Ciclu_Euler();
}
if (gasit==true)
return;
viz[*it]=false;
top--;
}
}
}
int main()
{
fin >> N >> M;
for (i=1; i<=M; i++)
{
fin >> A[i] >> B[i];
G[A[i]].push_back(i);
G[B[i]].push_back(i);
}
for (i=1; i<=N; i++)
{
if (G[i].size() % 2==1)
{
fout << -1;
fin.close();
fout.close();
return 0;
}
}
st[1]=top=1;
Ciclu_Euler();
fin.close();
fout.close();
return 0;
}