#include <bits/stdc++.h>
using namespace std;
const int N = 2 * (1e5 + 1);
int n, m, a[N];
map<int, bool> mp;
map<int, int> idx;
vector<int> v;
void inv() {
  puts("-1");
  exit(0);
}
int getnext(int val) {
  while (val <= m && mp[val]) {
    val += 2;
  }
  if (val > m) inv();
  return val;
}
int main() {
  cin >> n >> m;
  for (int i = 0; i < n; ++i) scanf("%d", &a[i]);
  if (n & 1) inv();
  int e = 0, o = 0;
  int ex = 0;
  int R = 0;
  int oidx = 1, eidx = 2;
  for (int i = 0; i < n; ++i) {
    if (mp[a[i]]) {
      a[i] = -1;
      ++R;
    } else if (a[i] & 1)
      ++o;
    else
      ++e;
    mp[a[i]] = 1;
  }
  for (int i = 0; i < n; ++i) {
    if (a[i] == -1) {
      int nxt;
      if (o < e) {
        nxt = getnext(oidx);
        oidx = nxt;
        ++o;
      } else {
        nxt = getnext(eidx);
        eidx = nxt;
        ++e;
      }
      a[i] = nxt;
      mp[a[i]] = 1;
      ++ex;
      --R;
    } else if (!R && e != o) {
      if (e < o && a[i] % 2 == 1) {
        a[i] = getnext(eidx);
        eidx = a[i];
        mp[a[i]] = 1;
        ++ex;
        ++e;
        --o;
      } else if (o < e && a[i] % 2 == 0) {
        a[i] = getnext(oidx);
        oidx = a[i];
        mp[a[i]] = 1;
        ++ex;
        ++o;
        --e;
      }
    }
    if (i == n - 1 && o != e) i = 0;
  }
  cout << ex << endl;
  for (int i = 0; i < n; ++i) printf("%d ", a[i]);
  return 0;
}
