#include <bits/stdc++.h>
using namespace std;
vector<int> even;
vector<int> odd;
vector<int> ev;
vector<int> od;
map<int, int> ma;
map<int, int> mm;
int arr[200005];
int brr[200005];
int main() {
  int m, n;
  scanf("%d %d", &m, &n);
  int i, j;
  for (i = 0; i < m; i++) {
    scanf("%d", &arr[i]);
    brr[i] = arr[i];
  }
  int re = m / 2;
  for (i = 0; i < m; i++) {
    int x = arr[i];
    if (ma[x]) continue;
    ma[x]++;
    if (x % 2 == 0)
      even.push_back(i);
    else
      odd.push_back(i);
    mm[i]++;
  }
  int cou = 0;
  if (even.size() > re) {
    int xx = even.size();
    for (i = 0; i < (xx - re); i++) {
      int ind = even[even.size() - 1];
      od.push_back(ind);
      even.pop_back();
    }
  }
  if (odd.size() > re) {
    int xx = odd.size();
    for (i = 0; i < (xx - re); i++) {
      int ind = odd[odd.size() - 1];
      ev.push_back(ind);
      odd.pop_back();
    }
  }
  if (even.size() + ev.size() < re) {
    for (i = 0; i < m; i++) {
      if (mm[i] == 0) {
        ev.push_back(i);
        mm[i]++;
        if (ev.size() + even.size() == re) break;
      }
    }
  }
  if (odd.size() + od.size() < re) {
    for (i = 0; i < m; i++) {
      if (mm[i] == 0) {
        od.push_back(i);
        mm[i]++;
        if (od.size() + odd.size() == re) break;
      }
    }
  }
  for (i = 1; i <= n; i++) {
    if (ma[i]) continue;
    if (ev.size() == 0 && od.size() == 0) break;
    if (i % 2 == 0) {
      if (ev.size() > 0) {
        int ind = ev[ev.size() - 1];
        brr[ind] = i;
        ev.pop_back();
      }
    } else if (i % 2 == 1) {
      if (od.size() > 0) {
        int ind = od[od.size() - 1];
        brr[ind] = i;
        od.pop_back();
      }
    }
  }
  if (od.size() > 0 || ev.size() > 0) {
    printf("-1\n");
    return 0;
  }
  for (i = 0; i < m; i++) {
    if (brr[i] != arr[i]) cou++;
  }
  printf("%d\n", cou);
  for (i = 0; i < m; i++) printf("%d ", brr[i]);
}
