#include <iostream> #include <vector> #include <algorithm> using namespace std; const int maxN = 55; int n; int mat[maxN][maxN]; vector <vector <int>> ans; void doAns(int x) { vector <int> idc, win; for (int i = 1; i <= n; i++) { if (i == x) { continue; } if (mat[x][i]) { win.push_back(i); } else { idc.push_back(i); } } vector <int> v1, v2; for (int a : idc) { v1.push_back(a); } v1.push_back(x); for (int b : win) { v1.push_back(b); } reverse(idc.begin(), idc.end()); reverse(win.begin(), win.end()); v2.push_back(x); for (int b : win) { v2.push_back(b); } for (int a : idc) { v2.push_back(a); } ans.push_back(v1); ans.push_back(v2); } int main() { //freopen("test.in", "r", stdin); int m; cin >> n >> m; for (int i = 0; i < m; i++) { int x, y; cin >> x >> y; mat[x][y] = 1; } cout << "YES\n"; for (int i = 1; i <= n; i++) { doAns(i); } cout << ans.size() << '\n'; for (auto v : ans) { for (int x : v) { cout << x << ' '; } cout << '\n'; } return 0; }