Cod sursa(job #2390902)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 28 martie 2019 14:26:36
Problema Ciclu Eulerian Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include<cstdio>
#include<list>
#include<algorithm>
#define N 100001
#define M 15000000
int n,m,i,j,v,x,y,s[N*5],e=-1,t;
list<int> l[N];
char r[M];
int A()
{
  	int s=0;
  	for(e++;r[e]>='0'&&r[e]<='9';e++)
  		s=s*10+r[e]-'0';
  	return s;
}
void S(int x)
{
    int i,d=x>999999999?10:x>99999999?9:x>9999999?8:x>999999?7:x>99999?6:x>9999?5:x>999?4:x>99?3:x>9?2:1;
    for(i=d-1;i>=0;x/=10,i--)
        r[t+i]=x%10+48;
    r[t+d]=32,t+=d+1;
}
int main()
{
    freopen("ciclueuler.in","r",stdin),freopen("ciclueuler.out","w",stdout),fread(r,1,M,stdin),n=A(),m=A();
    while(m--)
        x=A(),y=A(),l[x].push_back(y),l[y].push_back(x);
    for(i=1;i<=n;++i)
        if(l[i].size()%2)
        {
            printf("-1");
            return 0;
        }
    for(v=s[1]=1;v;)
    {
        for(x=s[v];!l[x].empty();)
            y=l[x].front(),l[x].pop_front(),l[y].erase(find(l[y].begin(),l[y].end(),x)),s[++v]=x=y;
        S(s[v--]);
    }
    fwrite(r,1,t,stdout);
}