Pagini recente » Cod sursa (job #5323) | Cod sursa (job #1240126) | Cod sursa (job #1901678) | Cod sursa (job #1819599) | Cod sursa (job #1940203)
#include <bits/stdc++.h>
//#include <string.h>
using namespace std;
//ifstream cin ("date.in");
//ofstream cout ("date.out");
int v[500001];
map<int, int> sol;
int main()
{
int n, m, cate_pare = 0, cate_impare = 0, cate_pare_int_m, cate_impare_in_m;
cin >> n >> m;
if (n%2)
{
cout <<-1;
return 0;
}
cate_impare_in_m = m/2+(m%2==1);
cate_pare_int_m = m/2;
for (int i = 1; i<=n; ++i)
{
cin >> v[i];
if (sol.count(v[i]))
{
v[i] = -1;
continue;
}
sol[v[i]]=1;
if (v[i]%2)
{
if (cate_impare == n/2)
{
v[i] = -1;
}
else
{
cate_impare++;
if (v[i]<=m)
--cate_impare_in_m;
}
}
else
{
if (cate_pare==n/2)
v[i] = -1;
else
{
cate_pare++;
if (v[i]<=m)
--cate_pare_int_m;
}
}
}
if (cate_impare_in_m+cate_impare<n/2 || cate_pare+cate_pare_int_m<n/2)
{
cout << "-1";
return 0;
}
cout << n-cate_impare-cate_pare << '\n';
int par = 2, impar = 1;
for (int i = 1; i<=n; ++i)
{
if (v[i] == -1)
{
if (cate_pare<n/2)
{
while (sol.count(par))
par+=2;
cate_pare++;
v[i] = par;
par+=2;
}
else
{
while (sol.count(impar))
impar+=2;
cate_impare++;
v[i] = impar;
impar+=2;
}
}
cout << v[i] << " ";
}
return 0;
}