#include <bits/stdc++.h>
using namespace std;
using namespace std;
const long double PI = acos(-1.0);
int arr[200010];
set<int> ods;
set<int> evs;
map<int, int> counts;
set<pair<int, int> > odcs;
set<pair<int, int> > evcs;
map<int, vector<int> > swaps;
map<int, int> swapinds;
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(NULL);
  ;
  int N, M, i, oc = 0, ec = 0;
  cin >> N >> M;
  for (i = 0; i < N; ++i) {
    cin >> arr[i];
    if (arr[i] & 1) {
      ods.insert(arr[i]);
      ++oc;
    } else {
      evs.insert(arr[i]);
      ++ec;
    }
    ++counts[arr[i]];
  }
  for (auto it : counts) {
    if (it.second > 0) {
      if (it.first & 1)
        odcs.insert(make_pair(it.second, it.first));
      else
        evcs.insert(make_pair(it.second, it.first));
    }
  }
  int osn = 1, esn = 2;
  if (oc > ec) {
    while (oc > ec) {
      auto it = odcs.end();
      --it;
      odcs.erase(*it);
      pair<int, int> tmp = make_pair(it->first - 1, it->second);
      if ((it->first - 1) > 0) odcs.insert(tmp);
      while (evs.find(esn) != evs.end()) esn += 2;
      if (esn <= M) {
        evs.insert(esn);
        swaps[it->second].push_back(esn);
        swapinds[it->second] = 0;
        esn += 2;
        --oc;
        ++ec;
      } else {
        cout << -1;
        return 0;
      }
    }
  } else if (oc < ec) {
    while (oc < ec) {
      auto it = evcs.end();
      --it;
      evcs.erase(*it);
      pair<int, int> tmp = make_pair(it->first - 1, it->second);
      if ((it->first - 1) > 0) evcs.insert(tmp);
      while (ods.find(osn) != ods.end()) osn += 2;
      if (osn <= M) {
        ods.insert(osn);
        swaps[it->second].push_back(osn);
        swapinds[it->second] = 0;
        osn += 2;
        --ec;
        ++oc;
      } else {
        cout << -1;
        return 0;
      }
    }
  }
  while (!odcs.empty()) {
    auto it = odcs.end();
    --it;
    odcs.erase(*it);
    if (it->first == 1) continue;
    pair<int, int> tmp = make_pair(it->first - 1, it->second);
    if ((it->first - 1) > 1) odcs.insert(tmp);
    while (ods.find(osn) != ods.end()) osn += 2;
    if (osn <= M) {
      ods.insert(osn);
      swaps[it->second].push_back(osn);
      swapinds[it->second] = 0;
      osn += 2;
    } else {
      cout << -1;
      return 0;
    }
  }
  while (!evcs.empty()) {
    auto it = evcs.end();
    --it;
    evcs.erase(*it);
    if (it->first == 1) continue;
    pair<int, int> tmp = make_pair(it->first - 1, it->second);
    if ((it->first - 1) > 1) evcs.insert(tmp);
    while (evs.find(esn) != evs.end()) esn += 2;
    if (esn <= M) {
      evs.insert(esn);
      swaps[it->second].push_back(esn);
      swapinds[it->second] = 0;
      esn += 2;
    } else {
      cout << -1;
      return 0;
    }
  }
  int c = 0;
  for (i = 0; i < N; ++i) {
    if (swapinds.find(arr[i]) != swapinds.end() &&
        swapinds[arr[i]] < swaps[arr[i]].size()) {
      int tmp = arr[i];
      arr[i] = swaps[arr[i]][swapinds[arr[i]]];
      ++swapinds[tmp];
      ++c;
    }
  }
  cout << c << endl;
  for (i = 0; i < N; ++i) cout << arr[i] << " ";
  return 0;
}
