#include <bits/stdc++.h>
using namespace std;
int N, M;
int net;
pair<int, int> arr[210000];
int zzz[210000];
set<int> evens, odds;
int ans;
void die() {
  cout << "-1\n";
  exit(0);
}
int32_t main() {
  ios_base::sync_with_stdio(false);
  if (fopen("cf746e.in", "r")) {
    freopen("cf746e.in", "r", stdin);
    freopen("cf746e.out", "w", stdout);
  }
  cin >> N >> M;
  for (int i = 0; i < N; i++) {
    cin >> arr[i].first;
    if (arr[i].first % 2) {
      net++;
    } else {
      net--;
    }
    arr[i].second = i;
  }
  sort(arr, arr + N);
  for (int i = 1; i <= min(4 * N, M); i++) {
    if (i % 2 == 0) {
      evens.insert(i);
    } else {
      odds.insert(i);
    }
  }
  for (int i = 0; i < N; i++) {
    if (arr[i].first % 2) {
      if (odds.find(arr[i].first) != odds.end()) {
        odds.erase(odds.find(arr[i].first));
      }
    } else {
      if (evens.find(arr[i].first) != evens.end()) {
        evens.erase(evens.find(arr[i].first));
      }
    }
  }
  for (int i = 0; i < N - 1; i++) {
    if (arr[i].first == arr[i + 1].first) {
      if (net > 0) {
        if (evens.empty()) {
          die();
        }
        int u = *evens.begin();
        arr[i].first = u;
        evens.erase(evens.find(u));
        if (arr[i + 1].first % 2) {
          net -= 2;
        }
      } else if (net < 0) {
        if (odds.empty()) {
          die();
        }
        int u = *odds.begin();
        arr[i].first = u;
        odds.erase(odds.find(u));
        if (arr[i + 1].first % 2 == 0) {
          net += 2;
        }
      } else {
        if (arr[i].first % 2) {
          if (odds.empty()) {
            die();
          }
          int u = *odds.begin();
          arr[i].first = u;
          odds.erase(odds.find(u));
        } else {
          if (evens.empty()) {
            die();
          }
          int u = *evens.begin();
          arr[i].first = u;
          evens.erase(evens.find(u));
        }
      }
      ans++;
    }
  }
  sort(arr, arr + N);
  for (int i = 1; i <= min(4 * N, M); i++) {
    if (i % 2 == 0) {
      evens.insert(i);
    } else {
      odds.insert(i);
    }
  }
  for (int i = 0; i < N; i++) {
    if (arr[i].first % 2) {
      if (odds.find(arr[i].first) != odds.end()) {
        odds.erase(odds.find(arr[i].first));
      }
    } else {
      if (evens.find(arr[i].first) != evens.end()) {
        evens.erase(evens.find(arr[i].first));
      }
    }
  }
  for (int i = 0; i < N; i++) {
    if (net < 0) {
      if (arr[i].first % 2) {
        continue;
      }
      if (odds.empty()) {
        die();
      }
      int u = *odds.begin();
      arr[i].first = u;
      odds.erase(odds.find(u));
      ans++;
      net += 2;
    } else if (net > 0) {
      if (arr[i].first % 2 == 0) {
        continue;
      }
      if (evens.empty()) {
        die();
      }
      int u = *evens.begin();
      arr[i].first = u;
      evens.erase(evens.find(u));
      ans++;
      net -= 2;
    }
  }
  if (net) {
    die();
  }
  cout << ans << '\n';
  for (int i = 0; i < N; i++) {
    zzz[arr[i].second] = arr[i].first;
  }
  cout << zzz[0];
  for (int i = 1; i < N; i++) {
    cout << ' ' << zzz[i];
  }
  return 0;
}
