#include <bits/stdc++.h>
using namespace std;
int n;
int prime[] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59};
vector<int> pr[65];
int arr[105];
int dp[105][1 << 18];
bool Check(int mask, int pos) { return mask & (1 << pos); }
int Set(int mask, int pos) { return mask | (1 << pos); }
int ABS(int a) {
  if (a < 0)
    return -a;
  else
    return a;
}
int solve(int pos, int mask) {
  if (pos == n) return 0;
  int &ret = dp[pos][mask];
  if (ret != -1) return ret;
  ret = 1e9;
  for (int i = 1; i <= 59; i++) {
    bool ck = 1;
    int nmask = mask;
    for (int j = 0; j < pr[i].size(); j++) {
      int position = pr[i][j];
      if (Check(mask, position)) {
        ck = 0;
      }
      if (ck == 0) break;
      nmask = Set(nmask, position);
    }
    if (ck == 0) continue;
    int tmp = ABS(arr[pos] - i) + solve(pos + 1, nmask);
    ret = min(ret, tmp);
  }
  return ret;
}
void rec(int pos, int mask) {
  if (pos == n) return;
  for (int i = 1; i <= 59; i++) {
    bool ck = 1;
    int nmask = mask;
    for (int j = 0; j < pr[i].size(); j++) {
      int position = pr[i][j];
      if (Check(mask, position)) {
        ck = 0;
      }
      if (ck == 0) break;
      nmask = Set(nmask, position);
    }
    if (ck == 0) continue;
    int cost = ABS(arr[pos] - i);
    if (solve(pos, mask) == cost + solve(pos + 1, nmask)) {
      printf("%d ", i);
      rec(pos + 1, nmask);
      return;
    }
  }
}
int main() {
  for (int i = 1; i <= 60; i++) {
    for (int j = 0; j < 17; j++) {
      if (i % prime[j] == 0) pr[i].push_back(j);
    }
  }
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    scanf("%d", &arr[i]);
  }
  memset(dp, -1, sizeof(dp));
  rec(0, 0);
  return 0;
}
