func_code_string: #include<bits/stdc++.h>   #define maxn 1000000   using namespace std;   int n,d;   int a[maxn];   long long prod[10];   long long nprod[10];   long long inf=1e15;   vector<int> ans[10];   vector<int> nans[10];   bool tk[maxn];   int inv[10];   int mp[10];   int omp[10];   int main()   {       scanf( %d %d ,&n,&d);       for(int i=0;i<n;i++) {           scanf( %d ,&a[i]);       }       if(d==0) {           int rem=1;           for(int i=0;i<n;i++) {               rem=(rem*a[i])%10;           }           if(rem==0) {               printf( %d n ,n);               for(int i=0;i<n;i++) printf( %d  ,a[i]);           }           else {               printf( -1 );           }           return 0;       }       if(d==5) {           int rem=1;           int cnt=0;           for(int i=0;i<n;i++) {               if(a[i]%2!=0) {                   cnt++;                   rem=(rem*a[i])%10;               }           }           if(rem==d) {               printf( %d n ,cnt);               for(int i=0;i<n;i++) {                   if(a[i]%2!=0) {                       printf( %d  ,a[i]);                   }               }           }           else {               printf( -1 );           }           return 0;       }       if(d%2==0) {           d=d%5;           inv[1]=1;           inv[4]=4;           inv[2]=3;           inv[3]=2;           prod[1]=prod[2]=prod[3]=prod[4]=inf;           prod[1]=1;           int ac=1;           int pcnt=0;           for(int i=0;i<n;i++) {               if(a[i]%5==0) continue;               if(a[i]%2==0) pcnt++;           }           if(pcnt==0) {               printf( -1 );               return 0;           }           for(int i=0;i<n;i++) {               if(a[i]%5==0) continue;               int r=a[i]%5;               ac=(ac*r)%5;               for(int j=1;j<=4;j++) {                   nprod[j]=prod[j];                   nans[j].clear();                   for(auto k:ans[j]) nans[j].push_back(k);               }               for(int j=1;j<=4;j++) {                   int nrem=(r*j)%5;                   if(nprod[nrem]>prod[j]*a[i]) {                       int tcnt=0;                       if(a[i]%2==0) tcnt++;                       for(auto k:ans[j]) if(a[k]%2==0) tcnt++;                          if(tcnt!=pcnt) {                           nprod[nrem]=prod[j]*a[i];                           nans[nrem].clear();                           for(auto k:ans[j]) nans[nrem].push_back(k);                           nans[nrem].push_back(i);                       }                   }               }               for(int j=1;j<=4;j++) {                   prod[j]=nprod[j];                   ans[j].clear();                   for(auto k:nans[j]) ans[j].push_back(k);               }           }           d=(inv[d]*ac)%5;           //printf( %d n n ,d);           if(prod[d]==inf) {               printf( -1 );               return 0;           }           for(auto v:ans[d]) {               tk[v]=true;           }           int cnt=0;           for(int i=0;i<n;i++) {               if(a[i]%5==0 || tk[i]) continue;               cnt++;           }           if(cnt==0) {               printf( -1 );               return 0;           }           printf( %d n ,cnt);           for(int i=0;i<n;i++) {               if(a[i]%5==0 || tk[i]) continue;               printf( %d  ,a[i]);           }           return 0;       }       mp[1]=1;       mp[2]=3;       mp[3]=7;       mp[4]=9;       inv[1]=1;       inv[9]=9;       inv[7]=3;       inv[3]=7;       omp[1]=1;       omp[3]=2;       omp[7]=3;       omp[9]=4;       prod[1]=prod[2]=prod[3]=prod[4]=inf;       prod[1]=1;       int ac=1;       for(int i=0;i<n;i++) {           if(a[i]%5==0 || a[i]%2==0) continue;           int r=a[i]%10;           ac=(ac*r)%10;           for(int j=1;j<=4;j++) {               nprod[j]=prod[j];               nans[j].clear();               for(auto k:ans[j]) nans[j].push_back(k);           }           for(int j=1;j<=4;j++) {               int nrem=omp[(r*mp[j])%10];               if(nprod[nrem]>prod[j]*a[i]) {                   nprod[nrem]=prod[j]*a[i];                   nans[nrem].clear();                   for(auto k:ans[j]) nans[nrem].push_back(k);                   nans[nrem].push_back(i);               }           }           for(int j=1;j<=4;j++) {               prod[j]=nprod[j];               ans[j].clear();               for(auto k:nans[j]) ans[j].push_back(k);           }       }       d=omp[(inv[d]*ac)%10];       if(prod[d]==inf) {           printf( -1 );           return 0;       }       for(auto v:ans[d]) {           tk[v]=true;       }       int cnt=0;       for(int i=0;i<n;i++) {           if(a[i]%5==0 || a[i]%2==0 || tk[i]) continue;           cnt++;       }       if(cnt==0) {           printf( -1 );           return 0;       }       printf( %d n ,cnt);       for(int i=0;i<n;i++) {           if(a[i]%5==0 || a[i]%2==0 || tk[i]) continue;           printf( %d  ,a[i]);       }       return 0;   }   