#include <bits/stdc++.h>
using namespace std;
int n, m, p, q, num;
int a[200010], d[200010];
bool c[200010];
map<int, bool> vis;
vector<int> np, nq;
int main() {
  ios::sync_with_stdio(false);
  cin >> n >> m;
  for (int i = 1; i <= n; ++i) {
    cin >> a[i];
    if (vis[a[i]] == 1) c[i] = 1;
    vis[a[i]] = 1;
    if ((a[i] & 1) == 1)
      ++p;
    else
      ++q;
  }
  for (int i = 1; i <= n; ++i) {
    if (c[i] == 1) {
      if ((a[i] & 1) == 0 && q > p) {
        d[i] = 1;
        --q, ++p;
      } else if ((a[i] & 1) == 1 && p > q) {
        d[i] = 2;
        --p, ++q;
      } else {
        if ((a[i] & 1) == 0)
          d[i] = 2;
        else
          d[i] = 1;
      }
    }
  }
  for (int i = 1; i <= n; ++i) {
    if (c[i] == 1) continue;
    if ((a[i] & 1) == 0) {
      if (q > p) {
        c[i] = 1;
        d[i] = 1;
        --q, ++p;
      }
    } else {
      if (p > q) {
        c[i] = 1;
        d[i] = 2;
        --p, ++q;
      }
    }
  }
  p = 0, q = 0;
  for (int i = m; (p <= 100000 || q <= 100000) && i > 0; --i) {
    if (vis[i] == 0) {
      if ((i & 1) == 1)
        np.push_back(i), ++p;
      else
        nq.push_back(i), ++q;
    }
  }
  p = 0, q = 0;
  for (int i = 1; i <= n; ++i) {
    if (c[i] == 1) {
      if (d[i] == 1) {
        if (p < np.size())
          a[i] = np[p++];
        else {
          puts("-1");
          return 0;
        }
      } else if (d[i] == 2) {
        if (q < nq.size())
          a[i] = nq[q++];
        else {
          puts("-1");
          return 0;
        }
      }
      ++num;
    }
  }
  cout << num << endl;
  for (int i = 1; i <= n; ++i) {
    cout << a[i] << " ";
  }
  cout << endl;
  return 0;
}
