#include <bits/stdc++.h>
using namespace std;
int n, m;
struct hp {
  int val, id;
  bool flag;
} a[200005];
int odd[200005], even[200005], cnt, cnto, cnte, anso[200005], anse[200005];
int cmpval(hp a, hp b) { return a.val > b.val; }
int cmpid(hp a, hp b) { return a.id < b.id; }
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; ++i) scanf("%d", &a[i].val), a[i].id = i;
  sort(a + 1, a + n + 1, cmpval);
  a[0].val = 0;
  odd[++odd[0]] = -1;
  even[++even[0]] = 0;
  for (int i = 1; i <= n; ++i)
    if (a[i].val != a[i - 1].val) {
      if (a[i].val % 2) {
        odd[++odd[0]] = a[i].val;
        if (odd[0] - 1 <= n / 2) a[i].flag = true;
      } else {
        even[++even[0]] = a[i].val;
        if (even[0] - 1 <= n / 2) a[i].flag = true;
      }
    }
  if (odd[0] - 1 <= n / 2) cnto = n / 2 - odd[0] + 1;
  if (even[0] - 1 <= n / 2) cnte = n / 2 - even[0] + 1;
  cnt = cnto + cnte;
  sort(odd + 1, odd + odd[0] + 1);
  sort(even + 1, even + even[0] + 1);
  for (int i = 2; i <= odd[0]; ++i) {
    if (!cnto) break;
    for (int j = odd[i - 1] + 2; j < odd[i]; j += 2) {
      anso[++anso[0]] = j;
      --cnto;
      if (!cnto) break;
    }
  }
  for (int i = odd[odd[0]] + 2; i <= m; i += 2) {
    if (!cnto) break;
    anso[++anso[0]] = i;
    --cnto;
  }
  if (cnto) {
    puts("-1");
    return 0;
  }
  for (int i = 2; i <= even[0]; ++i) {
    if (!cnte) break;
    for (int j = even[i - 1] + 2; j < even[i]; j += 2) {
      anse[++anse[0]] = j;
      --cnte;
      if (!cnte) break;
    }
  }
  for (int i = even[even[0]] + 2; i <= m; i += 2) {
    if (!cnte) break;
    anse[++anse[0]] = i;
    --cnte;
  }
  if (cnte) {
    puts("-1");
    return 0;
  }
  for (int i = 1; i <= n; ++i)
    if (!a[i].flag) {
      if (anso[0])
        a[i].val = anso[anso[0]--];
      else
        a[i].val = anse[anse[0]--];
    }
  sort(a + 1, a + n + 1, cmpid);
  printf("%d\n", cnt);
  for (int i = 1; i <= n; ++i) printf("%d%c", a[i].val, " \n"[i == n]);
}
