// i'm wutan
#include <bits/stdc++.h>
#define EL cout<<'\n'
#define pli pair<ll,int>
#define pll pair<ll,ll>
#define pii pair<int,int>
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define sz(a) int(a.size())
#define FU(x,a,b) for(int x=int(a);x<=int(b);x++)
#define FD(x,a,b) for(int x=int(a);x>=int(b);x--)
#define PROB "1510D"
using namespace std;
typedef long long ll;
typedef double db;


template <typename T>
inline void read(T& x){
    bool Neg = false;
    char c;
    for (c = getchar(); c < '0' | c > '9'; c = getchar())
        if (c == '-') Neg = !Neg;
    x = c - '0';
    for (c = getchar(); c >= '0' && c <= '9'; c = getchar())
        x = x * 10 + c - '0';
    if (Neg) x = -x;
}

template <typename T>
inline void write(T x)
{
    if (x < 0)
    {
        putchar('-'); x = -x;
    }
    T p = 1;
    for (T temp = x / 10; temp > 0; temp /= 10) p *= 10;
    for (; p > 0; x %= p, p /= 10) putchar(x / p + '0');
}

void setIO() {
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    if(fopen(PROB".inp", "r")){
        freopen(PROB".inp", "r",stdin);
        freopen(PROB".out", "w",stdout);
    }
}

const int N = 1e5 + 2;
int n, d, a[N];
double dp[N][10];
int trace[N][10];
bool ok = false;
void readinp(){
    int m;
    cin >> m >> d;
    n = 0;
    FU(i, 1, m){
        int x; cin >> x;
        if (x != 1) a[++n] = x;
        else ok = true;
    }
}



void solve(){
    FU(i, 0, n) FU(j, 0, 9) dp[i][j] = db(-1);
    dp[0][1] = 0;
    FU(i, 0, n - 1) FU(j, 0, 9) if (dp[i][j] != -1){
        int k = (j * a[i + 1]) % 10;
        if (dp[i + 1][k] < dp[i][j] + db(log2(a[i + 1]))){
            trace[i + 1][k] = j;
            dp[i + 1][k] = dp[i][j] + db(log2(a[i + 1]));
        }
        if (dp[i + 1][j] < dp[i][j]){
            trace[i + 1][j] = j;
            dp[i + 1][j] = dp[i][j];
        }
    }
    if (d == 1 && dp[n][d] <= 0 && ok){
        cout << 1,EL;
        cout << 1,EL;
        return;
    }
    if (dp[n][d] <= 0){
        cout << -1;
        return;
    }
    vector < int > in;
    int i = n, j = d;
    while (i > 0){
        int prev = trace[i][j];
        if (dp[i - 1][prev] != dp[i][j]){
            in.pb(a[i]);
        }
        i--; j = prev;
    }
    cout << sz(in); EL;
    for (auto e : in) cout << e << ' ';
}
int main(){
    setIO();
    int t = 1; //cin >> t;
    while (t--){
        readinp();
        solve();
    }
}
