#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
vector<int> g[N], par(N, 0), lvl(N, 0), vis(N, 0), chain, present(N, 0),
    up(N, 0);
bool cmp(int x, int y) { return lvl[x] < lvl[y]; }
void dfs(int s, int p, int &fg) {
  lvl[s] = lvl[p] + 1;
  vis[s] = 1;
  par[s] = p;
  sort(g[s].begin(), g[s].end(), cmp);
  int cur = 0;
  for (auto i : g[s])
    if (lvl[i] == 0)
      continue;
    else if (lvl[i] == cur + 1)
      cur++;
    else if (lvl[s] > 2) {
      fg = 1;
      chain.push_back(s);
      chain.push_back(par[s]);
      chain.push_back(par[i]);
      for (auto i : chain) present[i] = 1;
      present[chain[1]] = 2;
      up[chain[0]] = 1, up[chain[1]] = 3, up[chain[2]] = 2;
      return;
    }
  for (auto i : g[s])
    if (!vis[i] && !fg) dfs(i, s, fg);
}
int main() {
  ios_base ::sync_with_stdio(0);
  cin.tie(0);
  int n, m;
  cin >> n >> m;
  vector<pair<long long int, long long int> > v(m);
  for (int j = 0; j < m; j++)
    cin >> v[j].first >> v[j].second, g[v[j].first].push_back(v[j].second),
        g[v[j].second].push_back(v[j].first);
  int comp = 0;
  vector<int> head;
  for (int j = 1; j <= n; j++) {
    if (vis[j]) continue;
    comp++;
    head.push_back(j);
    int fg = 0;
    dfs(j, 0, fg);
    if (fg) {
      int cnt = 4;
      vector<int> f, s;
      for (int j = 1; j <= n; j++)
        if (!present[j])
          f.push_back(cnt++), s.push_back(f.back());
        else {
          f.push_back(up[j]);
          s.push_back(present[j]);
        }
      cout << "YES\n";
      for (auto i : f) cout << i << " ";
      cout << endl;
      for (auto i : s) cout << i << " ";
      cout << endl;
      return 0;
    }
  }
  if (comp > 1) {
    vector<int> f, s;
    for (int j = 1; j <= n; j++) f.push_back(j), s.push_back(j);
    s[head[1] - 1] = s[head[0] - 1];
    cout << "YES\n";
    for (auto i : f) cout << i << " ";
    cout << endl;
    for (auto i : s) cout << i << " ";
    cout << endl;
    return 0;
  }
  int other = 0;
  for (int j = 1; j <= n; j++)
    if (lvl[j] > lvl[other]) other = j;
  for (int j = 0; j < N; j++) vis[j] = lvl[j] = par[j] = 0;
  comp = 0;
  head.clear();
  int fg = 0;
  dfs(other, 0, fg);
  if (fg) {
    int cnt = 4;
    vector<int> f, s;
    for (int j = 1; j <= n; j++)
      if (!present[j])
        f.push_back(cnt++), s.push_back(f.back());
      else {
        f.push_back(up[j]);
        s.push_back(present[j]);
      }
    cout << "YES\n";
    for (auto i : f) cout << i << " ";
    cout << endl;
    for (auto i : s) cout << i << " ";
    cout << endl;
    return 0;
  }
  cout << "NO\n";
  return 0;
}
