看了半天题解也没搞明白为啥WA了四个点
#include<bits/stdc++.h>
using namespace std;
const int N=100010,M=2000010;
int n,m,cnt=0,t;
int head[N],ver[M],nxt[M],tot=1;
int deg[N],stk[M],top;
vector<int>ans[N];
bool vis[M],vist[N];
void add(int x,int y){
ver[++tot]=y;
nxt[tot]=head[x],head[x]=tot;
}
void euler(int qd){
cnt++;
top=0;
stk[++top]=qd;
while(top>0){
int x=stk[top],i=head[x];
while(i&&vis[i]) i=nxt[i];
if(i){
stk[++top]=ver[i];
vis[i]=vis[i^1]=1;
head[x]=nxt[i];
}
else{
top--;
ans[cnt].push_back(x);
vist[x]=1;
}
}
}
int main(){
scanf("%d%d",&n,&m);
int a,b,s,t;
for(int i=1;i<=m;i++){
scanf("%d%d%d%d",&a,&b,&s,&t);
if(s^t){
add(a,b),add(b,a);
deg[a]++,deg[b]++;
}
}
for(int i=1;i<=n;i++){
if(deg[i]%2){
printf("NIE\n");
return 0;
}
}
for(int i=2;i<=2*m;i+=2){
if(!vis[m]&&!vist[ver[i]]) euler(ver[i]);
}
printf("%d\n",cnt);
for(int i=1;i<=cnt;i++){
int len=ans[i].size();
printf("%d ",len-1);
for(int j=0;j<len;j++){
printf("%d ",ans[i][j]);
}
printf("\n");
}
return 0;
}