wa
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int M=1e6,N=1e5;
int n,m,num,cl,out,nxt[M+5],to[M+5],from[M+5],d[M+5];
bool vis[N+5],del[M+5],in[N+5];
stack<int> s;
queue<int> ans[N+5];
void addedge(int s,int t){
num++;
to[num]=t;
nxt[num]=from[s];
from[s]=num;
}
void dfs(int x){
// cout<<"s "<<x<<endl;
vis[x]=true;
for(int i=from[x];i;i=nxt[i]){
if(del[i])
continue;
del[i]=true;
del[(i%2==0)?i-1:i+1]=true;
// cout<<i<<" "<<((i%2==0)?i-1:i+1)<<endl;
from[x]=nxt[i];
dfs(to[i]);
}
if(in[x]){
cl++;
ans[cl].push(x);
in[x]=0;
while(!s.empty()&&s.top()!=x){
ans[cl].push(s.top());
in[s.top()]=0;
s.pop();
}
ans[cl].push(x);
}
else{
s.push(x);
in[x]=1;
}
//cout<<"e "<<x<<endl;
}
signed main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
int a,b,s,t;
cin>>a>>b>>s>>t;
if(s!=t){
addedge(a,b);
addedge(b,a);
d[a]++;
d[b]++;
}
}
for(int i=1;i<=n;i++){
if(d[i]%2==1){
cout<<"NIE"<<endl;
return 0;
}
}
for(int i=1;i<=n;i++){
if(!vis[i])
dfs(i);
out=0;
// cout<<"!";
}
cout<<cl<<endl;
for(int i=1;i<=cl;i++){
cout<<ans[i].size()-1<<" ";
while(!ans[i].empty()){
cout<<ans[i].front()<<" ";
ans[i].pop();
}
cout<<endl;
}
return 0;
}