#include <bits/stdc++.h>
using namespace std;
bool ok, OK = 1, fl[200010];
int n, i, m, ob, obl, evl, ans, nu[200010];
set<int> A;
void init() {
  scanf("%d%d", &n, &m);
  for (i = 1; i <= n; i++) {
    scanf("%d", nu + i);
    if (A.count(nu[i]))
      fl[i] = 1;
    else
      A.insert(nu[i]);
    if (nu[i] & 1) ob++;
  }
}
bool ww(int &a, int b) {
  while (A.count(a) && a <= m) a += 2;
  if (a <= m) {
    ans++, nu[i] = a, ob += b, A.insert(a);
    return 1;
  } else {
    OK = 0;
    return 0;
  }
}
void work() {
  ob = ob - (n - ob), obl = 1, evl = 2;
  for (i = 1; i <= n; i++)
    if (fl[i])
      if (nu[i] & 1) {
        if (ob > 0) {
          if (!ww(evl, -2))
            if (ww(obl, 0))
              OK = 1;
            else
              break;
        } else if (!ww(obl, 0))
          break;
      } else {
        if (ob < 0) {
          if (!ww(obl, 2))
            if (ww(evl, 0))
              OK = 1;
            else
              break;
        } else if (!ww(evl, 0))
          break;
      }
  if (OK && ob) {
    if (ob > 0)
      for (i = 1; i <= n && ob; i++) {
        if ((nu[i] & 1) && !ww(evl, -2)) break;
      }
    else
      for (i = 1; i <= n && ob; i++) {
        if (!(nu[i] & 1) && !ww(obl, 2)) break;
      }
  }
  if (OK) {
    printf("%d\n", ans);
    for (i = 1; i < n; i++) printf("%d ", nu[i]);
    printf("%d\n", nu[n]);
  } else
    printf("-1\n");
}
int main() {
  init();
  work();
  return 0;
}
