#include <bits/stdc++.h>
using namespace std;
struct info {
  int v, i, f;
} ar[300000];
stack<int> od, ev;
map<int, int> mp;
int br[300000];
bool comp(info x, info y) {
  if (x.f == 1 && y.f == 0) return 1;
  if (x.f == 0 && y.f == 1) return 0;
  return x.v > y.v;
}
int main() {
  int n, m, o = 0, e = 0, a = 0;
  cin >> n >> m;
  for (int i = 0; i < n; i++) {
    cin >> ar[i].v;
    ar[i].i = i;
    if (mp[ar[i].v] == 0) {
      ar[i].f = 0;
      if (ar[i].v % 2 == 0)
        e++;
      else
        o++;
    } else
      ar[i].f = 1;
    mp[ar[i].v] = 1;
  }
  for (int i = 1; i <= min(m, 1000000); i += 2)
    if (mp[i] == 0) od.push(i);
  for (int i = 2; i <= min(m, 1000000); i += 2)
    if (mp[i] == 0) ev.push(i);
  sort(ar, ar + n, comp);
  for (int i = 0; i < n; i++) {
    if (o != e || ar[i].f == 1) {
      if (ar[i].f == 1) {
        if (o > e) {
          if (!ev.empty()) {
            int v = ev.top();
            ar[i].v = v;
            ar[i].f = 0;
            ev.pop();
            e++;
            a++;
          }
        } else if (e > o) {
          if (!od.empty()) {
            int v = od.top();
            od.pop();
            ar[i].v = v;
            ar[i].f = 0;
            o++;
            a++;
          }
        } else if (o == e && ar[i].f == 1) {
          if (!ev.empty()) {
            int v = ev.top();
            ev.pop();
            ar[i].v = v;
            ar[i].f = 0;
            e++;
            a++;
          } else if (!od.empty()) {
            int v = od.top();
            od.pop();
            ar[i].v = v;
            ar[i].f = 0;
            o++;
            a++;
          }
        }
      } else {
        if (o > e && ar[i].v % 2 == 1) {
          if (!ev.empty()) {
            int v = ev.top();
            ar[i].v = v;
            ar[i].f = 0;
            ev.pop();
            e++;
            o--;
            a++;
          }
        } else if (e > o && ar[i].v % 2 == 0) {
          if (!od.empty()) {
            int v = od.top();
            od.pop();
            ar[i].v = v;
            ar[i].f = 0;
            o++;
            e--;
            a++;
          }
        }
      }
    }
  }
  int f = 0;
  for (int i = 0; i < n; i++) f = f | ar[i].f;
  if (f || o != e)
    cout << -1 << endl;
  else {
    cout << a << endl;
    for (int i = 0; i < n; i++) br[ar[i].i] = ar[i].v;
    for (int i = 0; i < n; i++) cout << br[i] << " ";
  }
}
