#include <bits/stdc++.h>
using namespace std;
int primes[] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59};
int a[100];
int n;
pair<int, int> dp[100][1 << 10][8];
int masks[61];
int solve(int at, int mask, int used) {
  if (at == n) return 0;
  if (dp[at][mask][used].first != -1) return dp[at][mask][used].first;
  pair<int, int> best = make_pair(1000000, -1);
  for (int i = 1; i <= 60; ++i) {
    if (mask & masks[i]) continue;
    if (masks[i] == 0) continue;
    int ans = solve(at + 1, mask | masks[i], used) + abs(a[at] - i);
    if (ans < best.first) best = make_pair(ans, i);
  }
  if (used != 7) {
    int ansPrime =
        solve(at + 1, mask, used + 1) + abs(a[at] - primes[used + 10]);
    if (ansPrime < best.first) best = make_pair(ansPrime, primes[used + 10]);
  }
  int ansOne = solve(at + 1, mask, used) + abs(a[at] - 1);
  if (ansOne < best.first) best = make_pair(ansOne, 1);
  dp[at][mask][used] = best;
  return best.first;
}
int main() {
  memset(dp, -1, sizeof(dp));
  cin >> n;
  vector<pair<int, int> > order(n);
  for (int i = (0); i < int(n); ++i) {
    cin >> order[i].first;
    order[i].second = i;
  }
  sort(order.begin(), order.end());
  for (int i = (0); i < int(n); ++i) a[i] = order[i].first;
  for (int i = (0); i < int(61); ++i)
    for (int j = (0); j < int(10); ++j)
      if ((i % primes[j]) == 0) masks[i] |= 1 << j;
  solve(0, 0, 0);
  vector<int> ans(n);
  int mask = 0, used = 0;
  for (int i = 0; i < n; ++i) {
    int num = dp[i][mask][used].second;
    ans[i] = num;
    if (masks[num])
      mask |= masks[num];
    else if (num != 1)
      used++;
  }
  for (int i = (0); i < int(n); ++i)
    for (int j = (0); j < int(n); ++j)
      if (order[j].second == i) printf("%d ", ans[j]);
  printf("\n");
}
