func_code_string: #include <bits/stdc++.h>   using namespace std;   int tot, n;   int vis[110];   int p[110];   int dp[2][262144], cs[110][262144], pre[110][262144];   int have[100];   int a[110], b[110];   string print(int sta) {     string x =   ;     for (int i = tot - 1; i >= 0; i--) {       if (sta & (1 << i))         x +=  1 ;       else         x +=  0 ;     }     return x;   }   int main() {     for (int i = 2; i <= 59; i++) {       if (!vis[i]) p[tot++] = i;       for (int j = i; j <= 59; j += i) vis[j] = 1;     }     for (int i = 1; i <= 59; i++) {       for (int j = 0; j < tot; j++) {         if (i % p[j] == 0) have[i] |= (1 << j);       }     }     scanf( %d , &n);     for (int i = 1; i <= n; i++) {       scanf( %d , &a[i]);     }     memset(dp, 0x3f, sizeof(dp));     dp[0][0] = 0;     register int tmp;     register int nowt = 1, pret = 0;     for (int i = 1; i <= n; i++) {       for (int sta = 0; sta < (1 << tot); sta++) {         dp[nowt][sta] = 0x3f3f3f3f;         for (int j = 1; j <= 59; j++) {           if ((have[j] & sta) != have[j]) continue;           tmp = dp[pret][have[j] ^ sta] + abs(j - a[i]);           if (tmp < dp[nowt][sta]) {             dp[nowt][sta] = tmp;             pre[i][sta] = have[j] ^ sta;             cs[i][sta] = j;           }         }       }       nowt ^= 1;       pret ^= 1;     }     int mi = 0x3f3f3f3f;     for (int i = 0; i < (1 << tot); i++) {       mi = min(mi, dp[pret][i]);     }     int pp;     for (int i = 0; i < (1 << tot); i++) {       if (mi == dp[pret][i]) {         pp = i;         for (int now = n; now >= 1; now--) {           b[now] = cs[now][pp];           pp = pre[now][pp];         }         for (int now = 1; now <= n; now++) {           printf( %d  , b[now]);         }         puts(  );         return 0;       }     }   }   