#include <bits/stdc++.h>
using namespace std;
const long long inf = 1e14;
const int MOD = int(1e9) + 7;
const int offset = 3000;
long long pr_mask[66];
int arr[111];
std::vector<int> prime;
void pre() {
  bool vis[66];
  memset(vis, false, sizeof vis);
  for (int i = 2; i <= 60; i++) {
    if (!vis[i]) {
      prime.push_back(i);
      for (int j = i; j <= 60; j += i) vis[j] = 1;
    }
  }
  pr_mask[1] = 0;
  for (int i = 2; i <= 60; i++) {
    for (int j = 0; j < prime.size(); j++) {
      if (i % prime[j]) continue;
      pr_mask[i] |= (1 << j);
    }
  }
}
int n;
int dp[111][1 << 18], trace[111][1 << 18];
int solve(int i, int mask) {
  if (i == n) return 0;
  if (dp[i][mask] != -1) return dp[i][mask];
  dp[i][mask] = 0;
  int ans = MOD;
  for (int j = 1; j < 60; j++) {
    if ((pr_mask[j] & mask) == 0) {
      ans = min(ans, solve(i + 1, mask | pr_mask[j]) + abs(j - arr[i]));
      if (ans == solve(i + 1, mask | pr_mask[j]) + abs(j - arr[i]))
        trace[i][mask] = j;
    }
  }
  return dp[i][mask] = ans;
}
int main() {
  pre();
  scanf("%d", &n);
  for (int i = 0; i < n; i++) scanf("%d", &arr[i]);
  memset(dp, -1, sizeof dp);
  solve(0, 0);
  long long mask = 0;
  for (int i = 0; i < n; i++) {
    cout << trace[i][mask] << " ";
    mask |= pr_mask[trace[i][mask]];
  }
  return 0;
}
