#include <bits/stdc++.h>
using namespace std;
const int N = (1 << 16) + 10;
const int INF = 999999999;
int arr[110];
int dp[110][N];
int f[110][N];
int sol[110][N];
int trans[110][N];
int n;
int p[16] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53};
int getx[60];
void init() {
  for (int k = 1; k < 60; k++) {
    int ans = 0;
    int x = k;
    for (int i = 0; i < 16; i++) {
      if (x % p[i] == 0) {
        ans |= (1 << i);
        while (x % p[i] == 0) x /= p[i];
      }
    }
    getx[k] = ans;
  }
}
int main(void) {
  init();
  while (cin >> n) {
    for (int i = 1; i <= n; i++) cin >> arr[i];
    memset(f, 0, sizeof(f));
    memset(dp, 0, sizeof(dp));
    f[0][0] = 1;
    for (int i = 1; i <= n; i++) {
      for (int j = 1; j < 60; j++) {
        for (int k = 0; k < N; k++) {
          if (f[i - 1][k] && (k & getx[j]) == 0) {
            int u = k | getx[j];
            if (!f[i][u]) {
              dp[i][u] = dp[i - 1][k] + abs(arr[i] - j);
              trans[i][u] = k;
              sol[i][u] = j;
            } else if ((dp[i - 1][k] + abs(arr[i] - j)) < dp[i][u]) {
              dp[i][u] = dp[i - 1][k] + abs(arr[i] - j);
              trans[i][u] = k;
              sol[i][u] = j;
            }
            f[i][u] = 1;
          }
        }
      }
    }
    int ans = INF;
    int pos = 0;
    for (int i = 0; i < N; i++) {
      if (f[n][i] && dp[n][i] < ans) {
        ans = dp[n][i];
        pos = i;
      }
    }
    stack<int> ou;
    for (int i = n; i >= 1; i--) {
      ou.push(sol[i][pos]);
      pos = trans[i][pos];
    }
    while (!ou.empty()) {
      cout << ou.top() << " ";
      ou.pop();
    }
    cout << endl;
  }
  return 0;
}
