#include <bits/stdc++.h>

using namespace std;

int main() {
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    int n, m; cin >> n >> m;
    vector<vector<int>> winner(1+n, vector<int>(1+n));
    for (int i = 0; i < m; ++i) {
        int a, b; cin >> a >> b;
        winner[a][b] = a;
        winner[b][a] = a;
    }

    vector<vector<int>> perms;
    vector<vector<int>> permsRev;
    for (int i = 1; i <= n; ++i) {
        for (int j = i+1; j <= n; ++j) {
            vector<int> v;
            v.push_back(i);
            v.push_back(j);
            for (int k = 1; k <= n; ++k) {
                if (k != i && k != j) v.push_back(k);
            }
            perms.push_back(v);
            reverse(v.begin(), v.end());
            permsRev.push_back(v);
        }
    }

    // since all are reversed, currently even

    cout << "YES\n" << (perms.size() + permsRev.size()) << '\n';
    for (vector<int> & vote : perms) {
        if (winner[vote[0]][vote[1]] == vote[1]) {
            swap(vote[0], vote[1]);
        }
        for (int x : vote) cout << x << ' ';
        cout << '\n';
    }
    for (vector<int> & vote : permsRev) {
        if (winner[vote[n-2]][vote[n-1]] == vote[n-1]) {
            swap(vote[n-2], vote[n-1]);
        }
        for (int x : vote) cout << x << ' ';
        cout << '\n';
    }
    return 0;
}