#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void read(T& num) {
  bool start = false, neg = false;
  char c;
  num = 0;
  while ((c = getchar()) != EOF) {
    if (c == '-')
      start = neg = true;
    else if (c >= '0' && c <= '9') {
      start = true;
      num = num * 10 + c - '0';
    } else if (start)
      break;
  }
  if (neg) num = -num;
}
struct node {
  int x, id;
  node(int a = 0, int b = 0) : x(a), id(b) {}
};
inline bool operator<(node a, node b) { return a.x < b.x; }
const int maxn = (int)(2e5) + 5;
node a[maxn];
int cnt[2];
int s[2][maxn];
int vi[maxn];
int w[maxn];
int res[maxn];
set<int> hs;
int main() {
  int n, m;
  read(n);
  read(m);
  for (int i = (1); i <= (n); i++) read(a[i].x), a[i].id = i;
  sort(a + 1, a + n + 1);
  for (int i = (1); i <= (n); i++)
    if (i == 1 || a[i].x != a[i - 1].x) cnt[a[i].x & 1]++;
  for (int i = (0); i <= (1); i++)
    cnt[i] = min(cnt[i], n / 2), cnt[i] = n / 2 - cnt[i];
  for (int i = (0); i <= (1); i++) w[i] = n / 2 - cnt[i];
  for (int i = (n); i >= (1); i--) {
    if (i == 1 || a[i].x != a[i - 1].x) {
      if (a[i].x & 1) {
        if (w[1] > 0) {
          w[1]--, vi[i] = 1;
          hs.insert(a[i].x);
        }
      } else {
        if (w[0] > 0) {
          w[0]--, vi[i] = 1;
          hs.insert(a[i].x);
        }
      }
    }
  }
  for (int i = 1, j = 1; j <= cnt[1]; i += 2) {
    if (i > m) {
      printf("-1\n");
      return 0;
    }
    if (!hs.count(i)) s[1][j++] = i;
  }
  for (int i = 2, j = 1; j <= cnt[0]; i += 2) {
    if (i > m) {
      printf("-1\n");
      return 0;
    }
    if (!hs.count(i)) s[0][j++] = i;
  }
  for (int i = (1); i <= (n); i++)
    if (vi[i]) res[a[i].id] = a[i].x;
  int now = cnt[0] + cnt[1];
  for (int i = (1); i <= (n); i++)
    if (!vi[i]) {
      if (cnt[0] > 0) {
        res[a[i].id] = s[0][cnt[0]--];
        vi[i] = 1;
      } else if (cnt[1] > 0) {
        res[a[i].id] = s[1][cnt[1]--];
        vi[i] = 1;
      }
    }
  printf("%d\n", now);
  for (int i = (1); i <= (n); i++) printf("%d ", res[i]);
  putchar('\n');
  return 0;
}
