注意图不一定连通!。
const int N=510;
bool g[N][N];
int d[N];
bool vis[N];
int n,m;
int cnt;
void dfs(int u)
{
vis[u]=true;
cnt++;
for(int i=1;i<=n;i++)
if(g[u][i] && !vis[i])
dfs(i);
}
int main()
{
cin>>n>>m;
while(m--)
{
int a,b;
cin>>a>>b;
g[a][b]=g[b][a]=true;
d[a]++,d[b]++;
}
int odd=0;
for(int i=1;i<=n;i++)
{
if(d[i] & 1) odd++;
if(i>1) cout<<' '<<d[i];
else cout<<d[i];
}
cout<<endl;
dfs(1);
if(odd == 0 && cnt == n) puts("Eulerian");
else if(odd == 2 && cnt == n) puts("Semi-Eulerian");
else puts("Non-Eulerian");
//system("pause");
return 0;
}