func_code_string: #include <bits/stdc++.h>   using namespace std;   const int maxn = 1e3 + 5;   const int maxm = 1 << 13;   int n;   long long k;   pair<int, long long> dp[maxn][maxm];   int pre[maxn][maxm];   long long gcd(long long a, long long b) { return b == 0 ? a : gcd(b, a % b); }   vector<long long> v;   void get_div(long long k) {     for (long long i = 1; i * i <= k; i++) {       if (k % i == 0) {         long long j = k / i;         v.push_back(i);         if (i != j) v.push_back(j);       }     }     sort(v.begin(), v.end());   }   long long a[maxn], c[maxn];   int main() {     scanf( %d%lld , &n, &k);     get_div(k);     for (int i = 1; i <= n; i++) {       scanf( %lld , &a[i]);       c[i] = gcd(a[i], k);     }     if (k == 1) {       printf( 1 n );       int p = 1;       long long minn = a[1];       for (int i = 2; i <= n; i++) {         if (a[i] < minn) minn = a[i], p = i;       }       printf( %d n , p);       return 0;     }     int m = v.size();     for (int i = 0; i <= n; i++)       for (int j = 0; j < m; j++) dp[i][j] = make_pair((int)1e9, (long long)1e16);     dp[0][0] = make_pair(0, 0);     for (int i = 1; i <= n; i++)       for (int j = 0; j < m; j++) {         if (dp[i][j] > dp[i - 1][j]) {           dp[i][j] = dp[i - 1][j];           pre[i][j] = j;         }         int t =             lower_bound(v.begin(), v.end(), v[j] / gcd(v[j], c[i])) - v.begin();         if (dp[i][j] >             make_pair(dp[i - 1][t].first + 1, dp[i - 1][t].second + a[i])) {           dp[i][j] =               make_pair(dp[i - 1][t].first + 1, dp[i - 1][t].second + a[i]);           pre[i][j] = t;         }       }     if (dp[n][m - 1].first > n)       printf( -1 n );     else {       printf( %d n , dp[n][m - 1].first);       int k = m - 1;       bool first = true;       for (int i = n; i >= 1; i--) {         if (pre[i][k] != k) {           if (first) {             printf( %d , i);             first = false;           } else             printf(  %d , i);         }         k = pre[i][k];       }     }     printf(  n );     return 0;   }   