#include <bits/stdc++.h>
using namespace std;
const int MOD = (int)1e9 + 7;
const double EPS = 1e-9;
const int INF = INT_MAX;
const long long INFLL = (long long)1e18;
const double PI = acos(-1.0);
template <class T>
T gcd(T a, T b) {
  return b ? gcd(b, a % b) : a;
}
template <class T>
T lcm(T a, T b) {
  return a / gcd(a, b) * b;
}
const int N = (int)1e5 + 5;
const int P = 1 << 18;
int n, m;
int a[N];
pair<int, int> g[N];
int use[N];
int main() {
  ios::sync_with_stdio(false);
  cout.setf(ios::fixed | ios::showpoint);
  cout.precision(8);
  cin >> n >> m;
  if (n == 1) return !printf("NO\n");
  for (int i = 0; i < m; i++) {
    int x, y;
    cin >> x >> y;
    a[x]++;
    a[y]++;
    g[i] = make_pair(x, y);
  }
  int flag = 0;
  for (int i = 1; i <= n; i++) {
    if (a[i] < n - 1) {
      flag = 1;
      for (int j = 0; j < m; j++) {
        if (g[j].first == i) {
          use[g[j].second] = 1;
        }
        if (g[j].second == i) {
          use[g[j].first] = 1;
        }
      }
      int cur;
      for (int j = 1; j <= n; j++) {
        if (!use[j] && j != i) {
          cur = j;
          break;
        }
      }
      cout << "YES\n";
      int st = 3;
      for (int j = 1; j <= n; j++) {
        if (j == i) {
          cout << "1 ";
          continue;
        }
        if (j == cur) {
          cout << "2 ";
          continue;
        }
        cout << st << ' ';
        st++;
      }
      cout << '\n';
      st = 3;
      for (int j = 1; j <= n; j++) {
        if (j == i || j == cur) {
          cout << "1 ";
          continue;
        }
        cout << st << ' ';
        st++;
      }
      return 0;
    }
  }
  if (!flag) return !printf("NO\n");
  return 0;
}
