#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 10;
int n, m, ans, A[maxn], P[maxn], Q[maxn], que[maxn];
map<int, int> seat;
int abs(int x) { return x > 0 ? x : -x; }
void init() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; ++i) scanf("%d", &A[i]);
}
void solve() {
  for (int i = 1; i <= n; ++i) {
    if (A[i] % 2 == 1) P[++P[0]] = i;
    if (A[i] % 2 == 0) Q[++Q[0]] = i;
  }
  int a = 1, b = 2, c = abs(P[0] - Q[0]) / 2, d = 0;
  for (int i = 1; i <= n / 2; ++i) {
    if (P[i] == 0) break;
    if (seat.find(A[P[i]]) == seat.end()) {
      seat[A[P[i]]] = 1;
      continue;
    }
    if (P[0] > Q[0] && d < c) {
      swap(P[i], P[P[0] - d]);
      d++;
      i--;
      continue;
    }
    while (seat.find(a) != seat.end()) a += 2;
    A[P[i]] = a;
    seat[a] = 1;
    ans++;
    if (a > m) {
      printf("-1\n");
      return;
    }
  }
  for (int i = 1; i <= n / 2; ++i) {
    if (Q[i] == 0) break;
    if (seat.find(A[Q[i]]) == seat.end()) {
      seat[A[Q[i]]] = 1;
      continue;
    }
    if (Q[0] > P[0] && d < c) {
      swap(Q[i], Q[Q[0] - d]);
      d++;
      i--;
      continue;
    }
    while (seat.find(b) != seat.end()) b += 2;
    A[Q[i]] = b;
    seat[b] = 1;
    ans++;
    if (b > m) {
      printf("-1\n");
      return;
    }
  }
  while (P[0] > Q[0]) {
    int x = P[P[0]--];
    Q[++Q[0]] = x;
    while (seat.find(b) != seat.end()) b += 2;
    A[x] = b;
    seat[b] = 1;
    ans++;
    if (b > m) {
      printf("-1\n");
      return;
    }
  }
  while (P[0] < Q[0]) {
    int x = Q[Q[0]--];
    P[++P[0]] = x;
    while (seat.find(a) != seat.end()) a += 2;
    A[x] = a;
    seat[a] = 1;
    ans++;
    if (a > m) {
      printf("-1\n");
      return;
    }
  }
  printf("%d\n", ans);
  for (int i = 1; i <= n; ++i) printf("%d ", A[i]);
}
int main() {
  init();
  solve();
  return 0;
}
