Pagini recente » Poliție | Cod sursa (job #1671374) | Cod sursa (job #2073964) | Monitorul de evaluare | Cod sursa (job #2163432)
#include <cstdio>
#include <stack>
#include <vector>
using namespace std;
#define NMAX 100005
#define MMAX 500005
typedef pair<int, int> ii;
int n, m;
bool viz[NMAX], done[MMAX];
vector<ii> a[NMAX];
vector<int> sol;
stack<int> st;
int main(){
int i, x, y, aux, rem;
FILE *fin, *fout;
fin = fopen("ciclueuler.in", "r");
fout = fopen("ciclueuler.out", "w");
fscanf(fin, "%d %d", &n, &m);
for(i=1; i<=m; i++) {
fscanf(fin, "%d %d", &x, &y);
a[x].push_back( ii(y, i) );
a[y].push_back( ii(x, i) );
}
for(i=1; i<=n; i++)
if((int) a[i].size() % 2) {
fscanf(fout, "-1");
return 0;
}
st.push(1);
rem = n;
while(!st.empty()) {
x = st.top();
if(!viz[x]) {
viz[x] = true;
rem--;
}
if(a[x].size()) {
y = a[x].back().first;
aux = a[x].back().second;
a[x].pop_back();
if(!done[aux]) {
done[aux] = true;
st.push(y);
}
}
else {
sol.push_back( st.top() );
st.pop();
}
}
sol.pop_back();
if(rem) {
fprintf(fout, "-1");
return 0;
}
else
for(i=0; i<(int)sol.size(); i++)
fprintf(fout, "%d ", sol[i]);
fclose(fin);
fclose(fout);
return 0;
}