#include <bits/stdc++.h>
std::set<int> eugOdd;
std::set<int> eugEven;
std::set<int> nickOdd;
std::set<int> nickEven;
int n, m, temp;
int numEvenx;
int numOddx;
int evenRequired, oddRequired;
std::unordered_map<int, int> evenLoc;
std::unordered_map<int, int> oddLoc;
int ans[(int)2e5];
int main(void) {
  scanf(" %d %d", &n, &m);
  int limit = std::min((int)2e5, m);
  ;
  for (int i = 1; i <= limit; ++i) {
    ;
    if (i & 1) {
      nickOdd.insert(nickOdd.end(), i);
    } else {
      nickEven.insert(nickEven.end(), i);
    }
  };
  for (int i = 0; i <= n - 1; ++i) {
    ;
    scanf(" %d", &temp);
    ;
    if (temp & 1) {
      if (eugOdd.count(temp))
        ++numOddx;
      else {
        eugOdd.insert(temp);
        oddLoc[temp] = i;
      }
    } else {
      if (eugEven.count(temp))
        ++numEvenx;
      else {
        eugEven.insert(temp);
        evenLoc[temp] = i;
      }
    };
  };
  std::vector<int> oddDiff;
  std::set_difference(nickOdd.begin(), nickOdd.end(), eugOdd.begin(),
                      eugOdd.end(), std::back_inserter(oddDiff));
  ;
  std::vector<int> evenDiff;
  std::set_difference(nickEven.begin(), nickEven.end(), eugEven.begin(),
                      eugEven.end(), std::back_inserter(evenDiff));
  ;
  if ((eugOdd.size() + oddDiff.size() < n / 2) ||
      (eugEven.size() + evenDiff.size() < n / 2)) {
    printf("-1\n");
    return 0;
  };
  ;
  int evenCount = 0;
  ;
  for (auto it = eugEven.begin(); it != eugEven.end(); ++it) {
    ans[evenLoc[*it]] = *it;
    if (++evenCount == n / 2) break;
  }
  int oddCount = 0;
  for (auto it = eugOdd.begin(); it != eugOdd.end(); ++it) {
    ans[oddLoc[*it]] = *it;
    if (++oddCount == n / 2) break;
  }
  printf("%d\n", n - evenCount - oddCount);
  evenRequired = n / 2 - evenCount;
  oddRequired = n / 2 - oddCount;
  int *ptr = ans;
  evenCount = 0;
  for (auto it = evenDiff.begin(); it != evenDiff.end(); ++it) {
    if (evenCount == evenRequired) break;
    while ((*ptr)) ++ptr;
    *ptr = *it;
    ++evenCount;
  }
  oddCount = 0;
  for (auto it = oddDiff.begin(); it != oddDiff.end(); ++it) {
    if (oddCount == oddRequired) break;
    while ((*ptr)) ++ptr;
    *ptr = *it;
    ++oddCount;
  }
  for (int i = 0; i <= n - 1; ++i) printf("%d ", ans[i]);
  printf("\n");
  return 0;
}
