#include <bits/stdc++.h>
using namespace std;
long long t = 1;
void solve() {
  long long n, m, cod = 0, cev = 0, ans = 0;
  cin >> n >> m;
  set<pair<long long, long long> > so, se;
  map<long long, long long> mapa;
  vector<long long> v(n + 1, 0);
  vector<pair<long long, long long> > ex;
  for (long long i = 1; i < n + 1; i += 1) {
    cin >> v[i];
    if (v[i] % 2 == 0) {
      if (mapa[v[i]] == 0) {
        cev++;
        se.insert(make_pair(v[i], i));
        mapa[v[i]]++;
      } else {
        ex.push_back(make_pair(v[i], i));
      }
    } else {
      if (mapa[v[i]] == 0) {
        cod++;
        so.insert(make_pair(v[i], i));
        mapa[v[i]]++;
      } else {
        ex.push_back(make_pair(v[i], i));
      }
    }
  }
  set<long long> soo, see;
  for (long long i = 1; i < min(m + 1, (long long)400005); i += 1) {
    if (mapa[i] == 0) {
      if (i % 2 == 0)
        see.insert(i);
      else
        soo.insert(i);
    }
  }
  long long ereq = max((long long)0, n / 2 - int((se).size())),
            oreq = max((long long)0, n / 2 - int((so).size()));
  if (ereq > int((see).size()) || int((soo).size()) < oreq) {
    cout << -1;
    return;
  } else {
    if (int((so).size()) > n / 2) {
      long long x = int((so).size()) - n / 2;
      for (long long i = 0; i < x; i += 1) {
        ex.push_back(*so.begin());
        so.erase(so.begin());
      }
    }
    if (int((se).size()) > n / 2) {
      long long x = int((se).size()) - n / 2;
      for (long long i = 0; i < x; i += 1) {
        ex.push_back(*se.begin());
        se.erase(se.begin());
      }
    }
    for (long long i = 0; i < int((ex).size()); i += 1) {
      if (ereq > 0) {
        v[ex[i].second] = *see.begin();
        ereq--;
        ans++;
        see.erase(see.begin());
      } else {
        v[ex[i].second] = *soo.begin();
        oreq--;
        ans++;
        soo.erase(soo.begin());
      }
    }
  }
  cout << ans << "\n";
  for (long long i = 1; i < n + 1; i += 1) cout << v[i] << " ";
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  while (t--) solve();
  return 0;
}
