#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
using namespace std;
const int INF = 2e9 + 9;
const long long INF1 = 1e18 + 9;
const long long MAXN = 4e5 + 7;
const long long MAXN1 = 1 << 11;
const long long MAXN2 = 4e6 + 9;
const long long MOD = 1e9 + 7;
const long long MOD1 = 1e9 + 9;
const long long ALPH = 50;
const long long PW1 = 239;
const long long PW2 = 199;
const long long PW3 = 193;
const long long PW4 = 117;
const long double EPS = 1e-9;
const long long BLOCK = 3684;
const long long BLOCK1 = 1 << 9;
void solve();
signed main() {
  srand('a' + 'l' + 'e' + 'x' + 'X' + '5' + '1' + '2');
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int q = 1;
  if (0) cin >> q;
  while (q--) solve();
}
set<int> v[MAXN];
void solve() {
  int n, m;
  cin >> n >> m;
  vector<int> v1(n), v2(n);
  for (int i = 0; i < m; ++i) {
    int a, b;
    cin >> a >> b;
    v[a].emplace(b);
    v[b].emplace(a);
  }
  for (int i = 1; i <= n; ++i) {
    v[i].emplace(i);
    if (v[i].size() == n) continue;
    for (int j = 1; j <= n; ++j) {
      if (v[i].find(j) == v[i].end()) {
        cout << "YES\n";
        v2[i - 1] = v2[j - 1] = v1[i - 1] = 1;
        v1[j - 1] = 2;
        int ind = 2;
        for (int t = 0; t < n; ++t)
          if (v1[t] == 0) v1[t] = ++ind;
        ind = 2;
        for (int t = 0; t < n; ++t)
          if (v2[t] == 0) v2[t] = ++ind;
        for (auto &i : v1) cout << i << " ";
        cout << "\n";
        for (auto &i : v2) cout << i << " ";
        return;
      }
    }
  }
  cout << "NO";
}
