#include <bits/stdc++.h>
using namespace std;
int toInt(string s) {
  istringstream sin(s);
  int t;
  sin >> t;
  return t;
}
template <class T>
string toString(T x) {
  ostringstream sout;
  sout << x;
  return sout.str();
}
int a[110], f[110][65536 + 10], g[110][65536 + 10], last[110][65536 + 10],
    ans[110], c[58 + 10];
const int prime[16] = {2,  3,  5,  7,  11, 13, 17, 19,
                       23, 29, 31, 37, 41, 43, 47, 53};
int cal(int n) {
  int ret = 0;
  for (int i = 0; i < 16 && n != 1; i++)
    while (n % prime[i] == 0) {
      n /= prime[i];
      ret |= 1 << i;
    }
  return ret;
}
int main() {
  for (int i = (1); i <= (58); ++i) c[i] = cal(i);
  int n;
  scanf("%d", &n);
  for (int i = (1); i <= (n); ++i) scanf("%d", a + i);
  for (int i = 0; i < (65536); ++i) f[1][i] = 1000000;
  for (int i = (1); i <= (58); ++i) {
    int state = c[i];
    if (abs(i - a[1]) < f[1][state]) {
      f[1][state] = abs(i - a[1]);
      g[1][state] = i;
    }
  }
  for (int i = (2); i <= (n); ++i)
    for (int j = 0; j < (65536); ++j) {
      f[i][j] = 1000000;
      for (int k = (1); k <= (58); ++k) {
        int state = c[k];
        if ((j & state) == state) {
          if (f[i - 1][j - state] + abs(k - a[i]) < f[i][j]) {
            f[i][j] = f[i - 1][j - state] + abs(k - a[i]);
            g[i][j] = k;
            last[i][j] = j - state;
          }
        }
      }
    }
  int x = 1000000, p = 0;
  for (int i = 0; i < (65536); ++i)
    if (f[n][i] < x) {
      x = f[n][i];
      p = i;
    }
  for (int i = (n); i >= (1); --i) {
    ans[i] = g[i][p];
    p = last[i][p];
  }
  for (int i = (1); i <= (n - 1); ++i) printf("%d ", ans[i]);
  printf("%d\n", ans[n]);
  return 0;
}
