#include <bits/stdc++.h>
using namespace std;
const int nmax = 200007;
const long long inf = 2e18;
const int mod = 1000000007;
int N, M, a[nmax], np, ni, nr, d[nmax], lg, b[nmax], g[nmax], x, y, imp[nmax],
    p[nmax], d1[nmax], d2[nmax], w;
bool poz[nmax];
map<int, bool> mp, v;
int main() {
  int i, j;
  cin >> N >> M;
  for (i = 1; i <= N; ++i) {
    cin >> a[i];
    b[i] = a[i];
    if (a[i] % 2)
      ++ni;
    else
      ++np;
  }
  if (N % 2) {
    cout << "-1\n";
    return 0;
  }
  sort(b + 1, b + N + 1);
  b[0] = 1;
  if (np > ni) {
    for (i = 1; i <= N; ++i) {
      if (mp[a[i]] && a[i] % 2 == 0) g[++g[0]] = i;
      mp[a[i]] = true;
    }
    nr = (np - ni) / 2;
    b[N + 1] = M + 1;
    for (i = 1; i <= N + 1; ++i) {
      j = b[i - 1];
      if (j % 2 == 0) {
        ++j;
        if (j == b[i]) continue;
        if (j <= b[i] && j <= M && lg < nr) d[++lg] = j;
      } else {
        if (i == 1 && j < b[i] && lg < nr) d[++lg] = j;
      }
      j += 2;
      while (j < b[i] && lg < nr && j <= M) {
        d[++lg] = j;
        j += 2;
      }
    }
    if (lg != nr) {
      cout << "-1\n";
      return 0;
    }
    for (i = 1; i <= g[0] && lg > 0; ++i) a[g[i]] = d[lg--], poz[g[i]] = true;
    for (i = 1; i <= N; ++i) {
      if (a[i] % 2 == 0 && lg > 0) a[i] = d[lg--];
    }
  } else if (ni > np) {
    for (i = 1; i <= N; ++i) {
      if (mp[a[i]] && a[i] % 2) g[++g[0]] = i;
      mp[a[i]] = true;
    }
    nr = (ni - np) / 2;
    b[N + 1] = M + 1;
    for (i = 1; i <= N + 1; ++i) {
      j = b[i - 1];
      if (j % 2) {
        ++j;
        if (j == b[i]) continue;
        if (j <= M && lg < nr && j < b[i]) d[++lg] = j;
      }
      j += 2;
      while (j < b[i] && lg < nr && j <= M) {
        d[++lg] = j;
        j += 2;
      }
    }
    if (lg != nr) {
      cout << "-1\n";
      return 0;
    }
    for (i = 1; i <= g[0] && lg > 0; ++i) a[g[i]] = d[lg--], poz[g[i]] = true;
    for (i = 1; i <= N; ++i) {
      if (a[i] % 2 && lg > 0) a[i] = d[lg--];
    }
  }
  int aa, bb;
  aa = bb = 0;
  for (i = 1; i <= N; ++i)
    if (a[i] % 2)
      ++aa;
    else
      ++bb;
  if (aa != bb) {
    cout << "-1\n";
    return 0;
  }
  for (i = 1; i <= N; ++i) {
    if (v[a[i]] && a[i] % 2) imp[++imp[0]] = i;
    if (v[a[i]] && a[i] % 2 == 0) p[++p[0]] = i;
    v[a[i]] = true;
  }
  for (i = 1; i <= N; ++i) b[i] = a[i];
  sort(b + 1, b + N + 1);
  b[N + 1] = M + 1;
  for (i = 1; i <= N + 1; ++i) {
    j = b[i - 1];
    if (j % 2) {
      ++j;
      if (j <= M && d1[0] < p[0] && j < b[i]) d1[++d1[0]] = j;
    }
    j += 2;
    while (j < b[i] && d1[0] < p[0] && j <= M) {
      d1[++d1[0]] = j;
      j += 2;
    }
    j = b[i - 1];
    if (j % 2 == 0) {
      ++j;
      if (j <= M && d2[0] < imp[0] && j < b[i]) d2[++d2[0]] = j;
    } else {
      if (j != b[i] && i == 1 && d2[0] < imp[0]) d2[++d2[0]] = j;
    }
    j += 2;
    while (j < b[i] && d2[0] < imp[0] && j <= M) {
      d2[++d2[0]] = j;
      j += 2;
    }
  }
  if (d1[0] != p[0] || d2[0] != imp[0]) {
    cout << "-1\n";
    return 0;
  }
  for (i = 1; i <= imp[0]; ++i) a[imp[i]] = d2[d2[0]--];
  for (i = 1; i <= p[0]; ++i) a[p[i]] = d1[d1[0]--];
  nr += imp[0] + p[0];
  cout << nr << '\n';
  for (i = 1; i <= N; ++i) cout << a[i] << ' ';
  cout << '\n';
  return 0;
}
