#include <bits/stdc++.h>
using namespace std;
inline long long in() {
  int32_t x;
  scanf("%d", &x);
  return x;
}
inline long long lin() {
  long long x;
  scanf("%lld", &x);
  return x;
}
const long long maxn = 2e5 + 10;
const long long SQ = 317;
long long a[maxn], cnt[maxn];
map<long long, long long> mark;
long long what[maxn];
long long res[maxn];
long long cur[2] = {2, 1};
long long id[maxn];
long long b[maxn];
bool g[maxn];
map<long long, bool> mark2;
int32_t main() {
  long long n = in(), m = in();
  if (n % 2) return cout << -1 << endl, 0;
  for (long long i = 0; i < n; i++) a[i] = in(), cnt[a[i] % 2]++;
  for (long long i = 0; i < n; i++) {
    g[i] = bool(!mark[a[i]]);
    mark[a[i]] = true;
    mark2[a[i]] = true;
  }
  iota(id, id + n, 0);
  sort(id, id + n,
       [](const long long &a, const long long &b) { return g[a] < g[b]; });
  for (long long pt = 0; pt < n; pt++) {
    long long i = id[pt];
    if (cnt[0] != cnt[1]) {
      long long maxi = max(cnt[0], cnt[1]);
      if (cnt[a[i] % 2] == maxi) {
        what[i] = (a[i] % 2) ^ 1;
        cnt[a[i] % 2]--, cnt[(a[i] % 2) ^ 1]++;
      } else
        what[i] = (a[i] % 2);
    } else
      what[i] = a[i] % 2;
  }
  mark.clear();
  long long res = 0;
  for (long long i = 0; i < n; i++) {
    if (what[i] == a[i] % 2) {
      if (mark[a[i]]) {
        bool fl = false;
        while (cur[a[i] % 2] <= m && fl == false) {
          if (mark[cur[a[i] % 2]] ||
              (cur[a[i] % 2] != a[i] && mark2[cur[a[i] % 2]])) {
            cur[a[i] % 2] += 2;
          } else
            fl = true;
        }
        if (fl == 0) return cout << -1 << endl, 0;
        b[i] = cur[a[i] % 2];
        cur[a[i] % 2] += 2;
        mark[b[i]] = true;
        res++;
      } else {
        b[i] = a[i];
      }
      mark[b[i]] = true;
    } else {
      res++;
      bool fl = false;
      while (cur[(a[i] % 2) ^ 1] <= m && fl == false) {
        if (mark[cur[(a[i] % 2) ^ 1]] || mark2[cur[(a[i] % 2) ^ 1]]) {
          cur[(a[i] % 2) ^ 1] += 2;
        } else
          fl = true;
      }
      if (fl == 0) return cout << -1 << endl, 0;
      b[i] = cur[(a[i] % 2) ^ 1];
      cur[(a[i] % 2) ^ 1] += 2;
      mark[b[i]] = true;
    }
  }
  cout << res << "\n";
  for (long long i = 0; i < n; i++) cout << b[i] << " ";
}
