/* 只要找到两个没有关系的点即可 */ #include<bits/stdc++.h> using namespace std; #define maxn 100005 long long n,m; int a[maxn],b[maxn]; vector<int>G[maxn]; int main(){ cin>>n>>m; if(n==1){ puts("NO"); return 0; } if(n*(n-1)/2<=m){ puts("NO"); return 0; } puts("YES"); /* if(n==2){ puts(" "); puts("1 2"); puts("1 1"); return 0; } */ for(int i=1;i<=m;i++){ int a,b; cin>>a>>b; G[a].push_back(b); G[b].push_back(a); } for(int i=1;i<=n;i++)G[i].push_back(i); for(int i=1;i<=n;i++) sort(G[i].begin(),G[i].end()); int pos1,pos2; for(int i=1;i<=n;i++){ if(G[i].size()==n)continue; for(int j=1;j<=G[i].size();j++) if(j!=G[i][j-1]){ pos1=i;pos2=j; break; } } int i=0; for(int j=1;j<=n;j++) if(j==pos1)cout<<n<<" "; else if(j==pos2)cout<<n-1<<" "; else cout<<++i<<" "; puts(""); i=0; for(int j=1;j<=n;j++) if(j==pos1 || j==pos2)cout<<n-1<<" "; else cout<<++i<<" "; }