#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
template<typename T>
void minimize(T& a, const T& b) {
if (b < a) a = b;
}
// - Nhận xét 1: Với mọi i, ta luôn có thể chọn b(i) = 1 (vì gcd(1, x) = 1, với mọi x)
// Do đó, trong phương án tối ưu, với mọi i, ta có:
// |b(i) - a(i)| <= a(i) - 1
// => b(i) <= 2 * a(i) - 1
// => max({b(i)}) <= 2 * max({a(i)}) - 1 <= 59
// - Nhận xét 2: Với mọi (i, j), để gcd(b(i), b(j)) = 1 thì b(i) và b(j) không được có chung thừa số nguyên tố nào.
// - Từ 2 nhận xét trên, ta rút ra được lời giải hoàn chỉnh như sau:
// max({b(i)}) <= 59 => Chỉ có 17 số nguyên tố <= 59
// => mask biểu diễn các số nguyên tố đã xuất hiện
// => dp[i][mask] = Giá trị nhỏ nhất của biểu thức khi xét b[1..i],
// với mask biểu diễn các số nguyên tố đã xuất hiện trong b[1..i]
const int N = 1e2 + 5;
int prime[17] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59};
int n;
int a[N];
int prime_mask[60]; // prime_mask[x] = mask biểu diễn các thừa số nguyên tố của x
int dp[N][1 << 17]; // dp[i][mask]
int b[N];
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n;
for (int i = 1; i <= n; i++) cin >> a[i];
for (int x = 1; x <= 59; x++) {
for (int i = 0; i < 17; i++) {
if (x % prime[i] == 0) prime_mask[x] |= (1 << i);
}
}
for (int i = 0; i <= n; i++) {
for (int mask = 0; mask < (1 << 17); mask++) {
int& cur = dp[i][mask];
cur = INF;
if (i == 0) {
if (mask == 0) cur = 0;
continue;
}
for (int x = 1; x <= 59; x++) {
if ((mask & prime_mask[x]) == prime_mask[x]) { // prime_mask[x] là submask của mask
int prev_mask = mask ^ prime_mask[x];
minimize(cur, dp[i - 1][prev_mask] + abs(x - a[i]));
}
}
}
}
int best_mask = 0;
for (int mask = 0; mask < (1 << 17); mask++) {
if (dp[n][mask] < dp[n][best_mask]) best_mask = mask;
}
for (int i = n; i >= 1; i--) {
for (int x = 1; x <= 59; x++) {
if ((best_mask & prime_mask[x]) == prime_mask[x]) { // prime_mask[x] là submask của best_mask
int prev_mask = best_mask ^ prime_mask[x];
if (dp[i - 1][prev_mask] + abs(x - a[i]) == dp[i][best_mask]) {
b[i] = x;
best_mask = prev_mask;
break;
}
}
}
}
for (int i = 1; i <= n; i++) cout << b[i] << ' ';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgIAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7ICAKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsgIAoKY29uc3QgaW50IElORiA9IDFlOTsgIApjb25zdCBsbCBMSU5GID0gMWUxODsgIAoKdGVtcGxhdGU8dHlwZW5hbWUgVD4Kdm9pZCBtaW5pbWl6ZShUJiBhLCBjb25zdCBUJiBiKSB7CglpZiAoYiA8IGEpIGEgPSBiOyAKfQoKLy8gLSBOaOG6rW4geMOpdCAxOiBW4bubaSBt4buNaSBpLCB0YSBsdcO0biBjw7MgdGjhu4MgY2jhu41uIGIoaSkgPSAxICh2w6wgZ2NkKDEsIHgpID0gMSwgduG7m2kgbeG7jWkgeCkKLy8gICAgICAgICAgICAgICBEbyDEkcOzLCB0cm9uZyBwaMawxqFuZyDDoW4gdOG7kWkgxrB1LCB24bubaSBt4buNaSBpLCB0YSBjw7M6IAovLyAJCQkJICAgICAgICB8YihpKSAtIGEoaSl8IDw9IGEoaSkgLSAxIAovLyAgICAgICAgICAgICAgID0+ICAgICAgICAgYihpKSAgICAgIDw9IDIgKiBhKGkpIC0gMQovLyAgICAgICAgICAgICAgID0+ICAgICAgbWF4KHtiKGkpfSkgIDw9IDIgKiBtYXgoe2EoaSl9KSAtIDEgPD0gNTkgCi8vIC0gTmjhuq1uIHjDqXQgMjogVuG7m2kgbeG7jWkgKGksIGopLCDEkeG7gyBnY2QoYihpKSwgYihqKSkgPSAxIHRow6wgYihpKSB2w6AgYihqKSBraMO0bmcgxJHGsOG7o2MgY8OzIGNodW5nIHRo4burYSBz4buRIG5ndXnDqm4gdOG7kSBuw6BvLgovLyAtIFThu6sgMiBuaOG6rW4geMOpdCB0csOqbiwgdGEgcsO6dCByYSDEkcaw4bujYyBs4budaSBnaeG6o2kgaG/DoG4gY2jhu4luaCBuaMawIHNhdTogCi8vICAgbWF4KHtiKGkpfSkgPD0gNTkgPT4gQ2jhu4kgY8OzIDE3IHPhu5Egbmd1ecOqbiB04buRIDw9IDU5Ci8vICAgPT4gbWFzayBiaeG7g3UgZGnhu4VuIGPDoWMgc+G7kSBuZ3V5w6puIHThu5EgxJHDoyB4deG6pXQgaGnhu4duIAovLyAgID0+IGRwW2ldW21hc2tdID0gR2nDoSB0cuG7iyBuaOG7jyBuaOG6pXQgY+G7p2EgYmnhu4N1IHRo4bupYyBraGkgeMOpdCBiWzEuLmldLAovLyAgICAgICAgICAgICAgICAgICAgduG7m2kgbWFzayBiaeG7g3UgZGnhu4VuIGPDoWMgc+G7kSBuZ3V5w6puIHThu5EgxJHDoyB4deG6pXQgaGnhu4duIHRyb25nIGJbMS4uaV0gICAKY29uc3QgaW50IE4gPSAxZTIgKyA1OyAKCmludCBwcmltZVsxN10gPSB7MiwgMywgNSwgNywgMTEsIDEzLCAxNywgMTksIDIzLCAyOSwgMzEsIDM3LCA0MSwgNDMsIDQ3LCA1MywgNTl9OwppbnQgbjsgCmludCBhW05dOyAKCmludCBwcmltZV9tYXNrWzYwXTsgLy8gcHJpbWVfbWFza1t4XSA9IG1hc2sgYmnhu4N1IGRp4buFbiBjw6FjIHRo4burYSBz4buRIG5ndXnDqm4gdOG7kSBj4bunYSB4IAppbnQgZHBbTl1bMSA8PCAxN107IC8vIGRwW2ldW21hc2tdCmludCBiW05dOyAKCmludCBtYWluKCkgewoJaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOyAKCWNpbi50aWUobnVsbHB0cik7IAkKCWNpbiA+PiBuOyAKCWZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgY2luID4+IGFbaV07IAoKCWZvciAoaW50IHggPSAxOyB4IDw9IDU5OyB4KyspIHsKCQlmb3IgKGludCBpID0gMDsgaSA8IDE3OyBpKyspIHsKCQkJaWYgKHggJSBwcmltZVtpXSA9PSAwKSBwcmltZV9tYXNrW3hdIHw9ICgxIDw8IGkpOyAKCQl9Cgl9CgoJZm9yIChpbnQgaSA9IDA7IGkgPD0gbjsgaSsrKSB7CgkJZm9yIChpbnQgbWFzayA9IDA7IG1hc2sgPCAoMSA8PCAxNyk7IG1hc2srKykgewoJCQlpbnQmIGN1ciA9IGRwW2ldW21hc2tdOyAKCQkJY3VyID0gSU5GOyAgCgkJCWlmIChpID09IDApIHsKCQkJCWlmIChtYXNrID09IDApIGN1ciA9IDA7ICAKCQkJCWNvbnRpbnVlOyAKCQkJfQoJCQlmb3IgKGludCB4ID0gMTsgeCA8PSA1OTsgeCsrKSB7CgkJCQlpZiAoKG1hc2sgJiBwcmltZV9tYXNrW3hdKSA9PSBwcmltZV9tYXNrW3hdKSB7IC8vIHByaW1lX21hc2tbeF0gbMOgIHN1Ym1hc2sgY+G7p2EgbWFzawoJCQkJCWludCBwcmV2X21hc2sgPSBtYXNrIF4gcHJpbWVfbWFza1t4XTsgCgkJCQkJbWluaW1pemUoY3VyLCBkcFtpIC0gMV1bcHJldl9tYXNrXSArIGFicyh4IC0gYVtpXSkpOyAKCQkJCX0KCQkJfQoJCX0KCX0KCglpbnQgYmVzdF9tYXNrID0gMDsgIAoJZm9yIChpbnQgbWFzayA9IDA7IG1hc2sgPCAoMSA8PCAxNyk7IG1hc2srKykgewoJCWlmIChkcFtuXVttYXNrXSA8IGRwW25dW2Jlc3RfbWFza10pIGJlc3RfbWFzayA9IG1hc2s7Cgl9CgoJZm9yIChpbnQgaSA9IG47IGkgPj0gMTsgaS0tKSB7CgkJZm9yIChpbnQgeCA9IDE7IHggPD0gNTk7IHgrKykgewoJCQlpZiAoKGJlc3RfbWFzayAmIHByaW1lX21hc2tbeF0pID09IHByaW1lX21hc2tbeF0pIHsgLy8gcHJpbWVfbWFza1t4XSBsw6Agc3VibWFzayBj4bunYSBiZXN0X21hc2sKCQkJCWludCBwcmV2X21hc2sgPSBiZXN0X21hc2sgXiBwcmltZV9tYXNrW3hdOyAKCQkJCWlmIChkcFtpIC0gMV1bcHJldl9tYXNrXSArIGFicyh4IC0gYVtpXSkgPT0gZHBbaV1bYmVzdF9tYXNrXSkgewoJCQkJCWJbaV0gPSB4OyAgCQoJCQkJCWJlc3RfbWFzayA9IHByZXZfbWFzazsgCgkJCQkJYnJlYWs7IAoJCQkJfSAKCQkJfQoJCX0KCX0KCglmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIGNvdXQgPDwgYltpXSA8PCAnICc7IAp9Cg==