#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 10;
int n, m, a[maxn], ptr[2], res[2], total;
map<int, int> cnt, vis;
vector<int> needed, p[2];
int Solve(int x, int y) {
  ptr[0] = 2, ptr[1] = 1;
  int ans = 0;
  while (res[x] < res[y] && ptr[x] <= m && total) {
    if (!vis[ptr[x]])
      vis[ptr[x]] = true, res[x]++, a[needed.back()] = ptr[x],
      needed.pop_back(), ans++, total--;
    ptr[x] += 2;
  }
  if (total == 0) {
    while (ptr[x] <= m && res[x] < res[y]) {
      if (!vis[ptr[x]])
        vis[ptr[x]] = true, res[x]++, res[y]--, a[p[y].back()] = ptr[x],
        p[y].pop_back(), ans++;
      ptr[x] += 2;
    }
    if (res[x] != res[y]) return !printf("-1");
  } else if (res[x] >= res[y]) {
    if (needed.size() & 1) return !printf("-1");
    while (ptr[x] <= m && ptr[y] <= m && needed.size() > 0) {
      while (ptr[x] <= m && vis[ptr[x]]) ptr[x] += 2;
      if (ptr[x] > m) break;
      vis[ptr[x]] = true;
      while (ptr[y] <= m && vis[ptr[y]]) ptr[y] += 2;
      if (ptr[y] > m) break;
      vis[ptr[y]] = true;
      a[needed.back()] = ptr[x];
      needed.pop_back();
      a[needed.back()] = ptr[y];
      needed.pop_back();
      ans += 2;
      total -= 2;
    }
    if (total > 0) return !printf("-1");
  } else {
    return !printf("-1");
  }
  printf("%d\n", ans);
  for (int i = 0; i < n; i++) printf("%d ", a[i]);
  puts("");
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 0; i < n; i++) {
    scanf("%d", &a[i]);
    cnt[a[i]]++, vis[a[i]] = true;
    if (cnt[a[i]] >= 2)
      needed.push_back(i);
    else
      p[a[i] & 1].push_back(i);
  }
  for (auto it : cnt) {
    total += it.second - 1;
    res[it.first & 1]++;
  }
  if (res[0] < res[1])
    Solve(0, 1);
  else
    Solve(1, 0);
}
