#include <bits/stdc++.h>
#pragma GCC optimize(3)
using namespace std;
const int N = 110;
inline int read() {
  int s = 0, w = 1;
  register char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') w = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9')
    s = (s << 3) + (s << 1) + (ch ^ 48), ch = getchar();
  return s * w;
}
int n, a[N], F[N][(1 << 16) + 5], pre[N][(1 << 16) + 5], g[N];
int pri[] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53};
vector<int> ot;
signed main() {
  n = read();
  for (register int i = 1; i <= n; i++) a[i] = read();
  memset(F, 0x3f, sizeof(F)), F[0][0] = 0;
  for (register int i = 1; i <= 58; i++)
    for (register int j = 0; j < 16; j++)
      if (i % pri[j] == 0) g[i] |= (1 << j);
  for (register int i = 1; i <= n; i++) {
    for (register int j = 0; j < (1 << 16); j++) {
      for (register int k = 1; k <= 58; k++) {
        if ((j & g[k]) != g[k]) continue;
        if (F[i][j] > F[i - 1][j ^ g[k]] + abs(a[i] - k)) {
          F[i][j] = F[i - 1][j ^ g[k]] + abs(a[i] - k);
          pre[i][j] = k;
        }
      }
    }
  }
  int Ans = 1e9;
  for (register int i = 0; i < (1 << 16); i++) Ans = min(Ans, F[n][i]);
  for (register int i = 0; i < (1 << 16); i++)
    if (Ans == F[n][i]) {
      int x = n, y = i;
      while (x) {
        int w = pre[x][y];
        ot.emplace_back(w);
        y ^= g[w], x--;
      }
      reverse(ot.begin(), ot.end());
      for (auto i : ot) printf("%d ", i);
      puts("");
      break;
    }
  return 0;
}
