#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;
    }
}