func_code_string: #include <bits/stdc++.h>   using namespace std;   int ini() {     int x;     scanf( %d , &x);     return x;   }   long long inl() {     long long x;     scanf( %lld , &x);     return x;   }   void file_mamager() {}   int arr[105], mask[105], dp[105][1 << 17];   pair<int, int> path[105][1 << 17];   vector<int> primes;   void gen() {     for (int i = 2; i <= 60; i++) {       bool is = true;       for (int j = 2; j * j <= i; j++) {         if (i % j == 0) {           is = false;           break;         }       }       if (is) primes.push_back(i);     }   }   void bit_rep(int x) {     for (int i = 0; i < 10; i++) cout << ((x >> i) & 1);     cout <<   n ;   }   int main() {     gen();     int n = ini();     for (int i = 1; i <= n; i++) {       for (int j = 0; j < (1 << 17); j++) dp[i][j] = 1e8;     }     for (int i = 1; i <= n; i++) arr[i] = ini();     for (int i = 1; i <= 60; i++) {       int x = 0, y = i;       for (int j = 0; j < 17; j++) {         if (y % primes[j] == 0) {           x |= (1 << j);           while (y % primes[j] == 0) y /= primes[j];         }       }       mask[i] = x;     }     for (int i = 1; i <= n; i++) {       for (int j = 1; j <= 60; j++) {         for (int k = 0; k < (1 << 17); k++) {           if ((k & mask[j]) == mask[j]) {             if (dp[i - 1][k ^ mask[j]] + abs(arr[i] - j) < dp[i][k]) {               dp[i][k] = dp[i - 1][k ^ mask[j]] + abs(arr[i] - j);               path[i][k] = {(k ^ mask[j]), j};             }           }         }       }     }     int mn = 1e8;     int x = (1 << 17) - 1;     for (int k = 0; k < (1 << 17); k++) {       if (dp[n][k] < mn) {         mn = dp[n][k];         x = k;       }     }     vector<int> ans;     for (int i = n; i >= 1; i--) {       ans.push_back(path[i][x].second);       x = path[i][x].first;     }     reverse(ans.begin(), ans.end());     for (int xx : ans) cout << xx <<    ;     cout <<   n ;     return 0;   }   