#include <bits/stdc++.h>

using namespace std;
vector<pair<int,int> > lol[55];
int taken[55];
signed main(){
    int n,m;
    cin>>n>>m;
    for(int i=0; i<m; i++){
        int a,b;
        cin>>a>>b;
        lol[max(a,b)].push_back({a,b});
    }
    vector<deque<int> > ans;
    deque<int> xd;
    xd.push_back(1);
    ans.push_back(xd);
    for(int i=2; i<=n; i++){
        vector<int> wins;
        vector<int> losses;
        for(int j=1; j<i; j++) taken[j]=0;
        for(auto u:lol[i]){
            if(u.first == i){
                wins.push_back(u.second);
                taken[u.second] = 1;
            }
        }
        for(int j=1; j<i; j++) if(taken[j]==0) losses.push_back(j);
        deque<int> norm,rev;
        norm.push_back(i);
        //rev.push_back(i);
        for(auto u:wins){
            norm.push_back(u);
            rev.push_front(u);
        }
        for(auto u:losses){
            norm.push_front(u);
            rev.push_back(u);
        }
        ans.push_back(rev);
        for(int j=0; j<i-1; j++){
            ans[j].push_back(i);
        }
        for(int j=i-1; j<2*i-2; j++){
            ans[j].push_front(i);
        }
        ans.push_back(norm);
    }
    cout<<"YES\n";
    cout<<ans.size()<<"\n";
    for(auto u:ans){
        for(auto v:u) cout<<v<<" ";
        cout<<"\n";
    }
}