#include <bits/stdc++.h>
using namespace std;
int vis[100005], vis1[100005];
vector<int> G[100005];
int main() {
  int n, m, a, b;
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; i++) G[i].clear();
  for (int i = 1; i <= m; i++)
    scanf("%d%d", &a, &b), vis[a]++, vis[b]++, G[a].push_back(b),
        G[b].push_back(a);
  int flag1 = 0, flag2 = 0;
  for (int i = 1; !flag1 && i <= n; i++) {
    if (vis[i] < n - 1) {
      flag1 = i;
      for (int j = 0; j < G[i].size(); j++) vis1[G[i][j]] = 1;
    }
  }
  for (int i = 1; i <= n && !flag2; i++) {
    if (i == flag1) continue;
    if (!vis1[i]) flag2 = i;
  }
  if (flag1 > flag2) swap(flag1, flag2);
  if (flag1) {
    puts("YES");
    int cnt = 2;
    for (int i = 1; i <= n; i++)
      printf("%d%c", i == flag1 ? 1 : (i == flag2 ? 2 : ++cnt),
             i == n ? '\n' : ' ');
    cnt = 2;
    for (int i = 1; i <= n; i++)
      printf("%d%c", i == flag1 ? 1 : (i == flag2 ? 1 : ++cnt),
             i == n ? '\n' : ' ');
  } else
    puts("NO");
  return 0;
}
