#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 5;
const int MOD = 1e9 + 7;
vector<pair<long long int, long long int> > vp;
map<long long int, long long int> mp, mpp;
vector<long long int> v, v1, v2;
long long int dp[N], visit[N];
set<int> se[N];
template <typename Arg1>
void __f(const char* name, Arg1&& arg1) {
  cerr << name << " : " << arg1 << std::endl;
}
template <typename Arg1, typename... Args>
void __f(const char* names, Arg1&& arg1, Args&&... args) {
  const char* comma = strchr(names + 1, ',');
  cerr.write(names, comma - names) << " : " << arg1 << "  ";
  __f(comma + 1, args...);
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(NULL);
  cout.tie(NULL);
  long long int n, m, val, k, d, mi = 1e9, mx(0);
  long long int sum(0), ct(0), p(0), q(0);
  string s;
  cin >> n >> m;
  long long int a[n];
  if (n == 1) return cout << "NO", 0;
  while (m--) {
    int x, y;
    cin >> x >> y;
    se[x].insert(y);
    se[y].insert(x);
  }
  for (int i = 1; i <= n; i++) {
    vp.push_back({se[i].size(), i});
  }
  sort(vp.begin(), vp.end());
  p = vp[0].first, q = vp[0].second;
  if (p == n - 1) return cout << "NO", 0;
  for (auto it : se[q]) mp[it]++;
  for (int i = 1; i <= n; i++) {
    if (mp[i] == 0 and i != q) {
      val = i;
      break;
    }
  }
  mp.clear();
  mp[q] = 1;
  mp[val] = 1;
  mpp[val] = 1;
  mpp[q] = 2;
  ct = 3;
  for (int i = 1; i <= n; i++) {
    if (mp[i] == 0) {
      mp[i] = ct;
      mpp[i] = ct;
      ct++;
    }
  }
  cout << "YES" << endl;
  for (int i = 1; i <= n; i++) cout << mpp[i] << ' ';
  cout << endl;
  for (int i = 1; i <= n; i++) cout << mp[i] << ' ';
}
