#include <bits/stdc++.h>
using namespace std;
struct ioi {
  int x, vt;
};
const int maxn = 1000000;
int n, n1, n2, m, res[maxn], ans = 1e9 + 7, p[maxn], c;
ioi a[maxn], b[maxn];
bool kt[maxn];
bool cmp(ioi a, ioi b) { return a.x < b.x; }
void xl1() {
  sort(a + 1, a + n1 + 1, cmp);
  sort(b + 1, b + n2 + 1, cmp);
  int dem = 0;
  int j = 1;
  int last = b[1].x;
  for (int i = 2; i <= n2; ++i) {
    int tmp = b[i].x;
    if (b[i].x == last) {
      while (kt[j]) j += 2;
      ++dem;
      b[i].x = j;
      kt[j] = true;
    }
    last = tmp;
  }
  int j1 = 2;
  last = a[1].x;
  for (int i = 2; i <= n1; ++i) {
    int tmp = a[i].x;
    if (a[i].x == last) {
      if (c < (n1 - n2) / 2) {
        while (kt[j]) j += 2;
        ++dem;
        a[i].x = j;
        ++c;
        kt[j] = true;
      } else {
        while (kt[j1]) j1 += 2;
        ++dem;
        a[i].x = j1;
        kt[j1] = true;
      }
    }
    last = tmp;
  }
  for (int i = 1; i <= n1; ++i)
    if (a[i].x % 2 == 0 && c < (n1 - n2) / 2) {
      while (kt[j]) j += 2;
      ++dem;
      a[i].x = j;
      ++c;
      kt[j] = true;
    }
  ans = dem;
}
void xl2() {
  sort(a + 1, a + n1 + 1, cmp);
  sort(b + 1, b + n2 + 1, cmp);
  int dem = 0;
  int j = 2;
  int last = a[1].x;
  for (int i = 2; i <= n1; ++i) {
    int tmp = a[i].x;
    if (a[i].x == last) {
      while (kt[j]) j += 2;
      ++dem;
      a[i].x = j;
      kt[j] = true;
    }
    last = tmp;
  }
  int j1 = 1;
  last = b[1].x;
  for (int i = 2; i <= n2; ++i) {
    int tmp = b[i].x;
    if (b[i].x == last) {
      if (c < (n2 - n1) / 2) {
        while (kt[j]) j += 2;
        ++dem;
        b[i].x = j;
        ++c;
        kt[j] = true;
      } else {
        while (kt[j1]) j1 += 2;
        ++dem;
        b[i].x = j1;
        kt[j1] = true;
      }
    }
    last = tmp;
  }
  for (int i = 1; i <= n2; ++i)
    if (b[i].x % 2 == 1 && c < (n2 - n1) / 2) {
      while (kt[j]) j += 2;
      ++dem;
      b[i].x = j;
      ++c;
      kt[j] = true;
    }
  ans = dem;
}
bool check() {
  if (c < abs(n1 - n2) / 2) return false;
  for (int i = 1; i <= n; ++i) {
    if (res[i] == p[i]) continue;
    if (res[i] > m) return false;
  }
  return true;
}
int main() {
  cin.tie(NULL);
  ios_base::sync_with_stdio(false);
  cin >> n >> m;
  for (int i = 1; i <= n; ++i) {
    int x;
    cin >> x;
    p[i] = x;
    if (x % 2)
      b[++n2].x = x, b[n2].vt = i;
    else
      a[++n1].x = x, a[n1].vt = i;
    if (x <= 1000000) kt[x] = true;
  }
  if (n1 >= n2)
    xl1();
  else
    xl2();
  for (int i = 1; i <= n1; ++i) res[a[i].vt] = a[i].x;
  for (int i = 1; i <= n2; ++i) res[b[i].vt] = b[i].x;
  if (check()) {
    cout << ans << "\n";
    for (int i = 1; i <= n; ++i) cout << res[i] << " ";
  } else
    cout << -1;
  return 0;
}
