#include <bits/stdc++.h>
using namespace std;
int h[200100];
int v[200100];
map<int, int> mp;
int n, m, l;
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 0; i < n; i++) {
    scanf("%d", &h[i]);
    mp[h[i]]++;
    if (h[i] % 2 == 0) l += 2;
  }
  int x = 1, y = 2, ans = 0;
  for (int i = 0; i < n; i++) {
    if (l == n) break;
    if (mp[h[i]] == 1) continue;
    if (l > n && h[i] % 2 == 0) {
      ans++;
      while (mp[x] > 0 && x <= m) x += 2;
      if (x > m) {
        printf("-1");
        return 0;
      }
      l -= 2;
      mp[h[i]]--;
      mp[x] = 1;
      h[i] = x;
      v[i] = 1;
    } else if (h[i] % 2 == 1 && l < n) {
      ans++;
      while (mp[y] > 0 && y <= m) y += 2;
      if (y > m) {
        printf("-1");
        return 0;
      }
      mp[h[i]]--;
      mp[y] = 1;
      l += 2;
      h[i] = y;
      v[i] = 1;
    }
  }
  for (int i = 0; i < n; i++) {
    if (l == n && mp[h[i]] == 1) continue;
    if (v[i]) continue;
    if ((l == n && h[i] % 2 == 1) || (l > n && h[i] % 2 == 0)) {
      ans++;
      while (mp[x] > 0 && x <= m) x += 2;
      if (x > m) {
        printf("-1");
        return 0;
      }
      if (h[i] % 2 == 0) l -= 2;
      mp[h[i]]--;
      mp[x] = 1;
      h[i] = x;
    } else if ((l == n && h[i] % 2 == 0) || (l < n && h[i] % 2 == 1)) {
      ans++;
      while (mp[y] > 0 && y <= m) y += 2;
      if (y > m) {
        printf("-1");
        return 0;
      }
      if (h[i] % 2 == 1) l += 2;
      mp[h[i]]--;
      mp[y] = 1;
      h[i] = y;
    }
  }
  if (l != n) {
    printf("-1");
    return 0;
  }
  printf("%d\n", ans);
  for (int i = 0; i < n; i++) {
    printf("%d ", h[i]);
  }
  return 0;
}
