#include <bits/stdc++.h>
using namespace std;
const int dx[9] = {0, 1, -1, 0, 0, -1, -1, 1, 1};
const int dy[9] = {0, 0, 0, -1, 1, -1, 1, -1, 1};
const double pi = acos(-1.0);
const int N = 2e5 + 100;
int n, m, a[N], odd = 0, nodd, neven, flag, ans = 0;
map<int, int> vis;
void swapeven(int i) {
  while (neven <= m && vis[neven]) neven += 2;
  if (neven > m)
    flag = 0;
  else
    vis[a[i]]--, vis[neven] = 1, a[i] = neven, neven += 2;
}
void swapodd(int i) {
  while (nodd <= m && vis[nodd]) nodd += 2;
  if (nodd > m)
    flag = 0;
  else
    vis[a[i]]--, vis[nodd] = 1, a[i] = nodd, nodd += 2;
}
int main() {
  ios::sync_with_stdio(0), cin.tie(0);
  cin >> n >> m;
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
    vis[a[i]]++;
    if (a[i] & 1) odd++;
  }
  nodd = 1, neven = 2;
  flag = 1;
  for (int i = 1; i <= n; i++) {
    if (vis[a[i]] == 1) continue;
    ans++;
    if (odd > n / 2) {
      if (a[i] % 2 == 1) odd--;
      swapeven(i);
    } else if (odd == n / 2) {
      if (a[i] % 2 == 0)
        swapeven(i);
      else
        swapodd(i);
    } else {
      if (a[i] % 2 == 0) odd++;
      swapodd(i);
    }
  }
  for (int i = 1; i <= n; i++) {
    if (odd == n / 2) break;
    if (odd < n / 2) {
      if (a[i] % 2 == 0) {
        odd++;
        ans++;
        swapodd(i);
      }
    } else {
      if (a[i] % 2 == 1) {
        odd--;
        ans++;
        swapeven(i);
      }
    }
  }
  if (odd != n / 2 || !flag) return cout << -1 << endl, 0;
  cout << ans << endl;
  for (int i = 1; i <= n - 1; i++) cout << a[i] << ' ';
  cout << a[n] << endl;
  return 0;
}
