#include <bits/stdc++.h>
using namespace std;
int p[20] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59};
int dp[110][1 << 16];
int path[110][1 << 16];
int choose[100][1 << 16];
int st[60];
int n, a[110];
int cal(int x) {
  if (x <= 1) return 0;
  int ans = 0;
  for (int i = 0; i < 16 && p[i] <= x; i++) {
    if (x % p[i] == 0) {
      ans |= (1 << i);
      while (x % p[i] == 0) {
        x /= p[i];
      }
    }
  }
  return ans;
}
int ans[110];
void solve(void) {
  for (int i = (1); i <= (n); i++) scanf("%d", a + i);
  for (int i = (1); i <= (58); i++) st[i] = cal(i);
  memset(dp, 0x3f3f3f3f, sizeof(dp));
  int cap = 1 << 16;
  dp[0][0] = 0;
  for (int i = (1); i <= (n); i++) {
    for (int j = 0; j < (cap); j++) {
      if (dp[i - 1][j] == 0x3f3f3f3f) continue;
      for (int k = (1); k <= (58); k++) {
        int kk = st[k];
        if (kk & j) continue;
        int tt = dp[i - 1][j] + ((k - a[i]) > 0 ? (k - a[i]) : (-(k - a[i])));
        if (dp[i][kk | j] > tt) {
          dp[i][kk | j] = tt;
          path[i][kk | j] = j;
          choose[i][kk | j] = k;
        }
      }
    }
  }
  int minr = 0x3f3f3f3f, id;
  for (int i = 0; i < (cap); i++) {
    if (minr > dp[n][i]) {
      id = i;
      minr = dp[n][i];
    }
  }
  for (int i = (n); i >= (1); i--) {
    ans[i] = choose[i][id];
    id = path[i][id];
  }
  for (int i = (1); i <= (n); i++)
    printf("%d%c", ans[i], (i == n) ? '\n' : ' ');
}
int main(void) {
  while (EOF != scanf("%d", &n)) solve();
  return 0;
}
