#include <bits/stdc++.h> using namespace std; #define int long long int32_t main() { ios_base::sync_with_stdio(false); cin.tie(0); int n, m;cin>>n>>m; vector<vector<bool>> gr(n+1, vector<bool>(n+1)); for (int i = 0; i < m; i++){ int a, b;cin>>a>>b; gr[a][b]=1; } for (int i = 1; i <= n; i++){ for (int j = 1; j <= n; j++){ if (i == j) continue; if (gr[i][j]==0 && gr[j][i]==0) gr[i][j]=1; } } vector<deque<int>> ans; ans.push_back(deque<int>(1,1)); int sz = 1; for (int i = 2; i <= n; i++){ for (int j = 0; j < sz; j++){ if (j <= sz/2){ ans[j].push_front(i); } else { ans[j].push_back(i); } } vector<int> fr; vector<int> bac; for (int k = 1; k < i; k++){ if (gr[i][k] == 0){ fr.push_back(k); } else bac.push_back(k); } ans.push_back(deque<int>()); for (auto it : fr) ans.back().push_back(it); ans.back().push_back(i); for (auto it : bac) ans.back().push_back(it); ans.push_back(deque<int>()); reverse(fr.begin(), fr.end()); reverse(bac.begin(), bac.end()); for (auto it : bac) ans.back().push_back(it); for (auto it : fr) ans.back().push_back(it); ans.back().push_back(i); sz+=2; } cout<<"YES"<<endl; cout<<ans.size()<<endl; for (int i = 0; i < ans.size(); i++){ while (ans[i].size()){ cout<<ans[i].front()<<" "; ans[i].pop_front(); } cout<<endl; } }