#include <bits/stdc++.h>

using namespace std;
mt19937 rnd(time(0));

//#pragma GCC optimize("Ofast")
//#pragma GCC optimize("fast-math")
//#pragma GCC optimize("unroll-loops")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,tune=native")
#define ios ios_base::sync_with_stdio(0);cout.tie(0);cin.tie(0);
#define int long long
#define ld long double
#define sz(a) (int)a.size()
#define all(a) a.begin(),a.end()
//ll p = 131;
int mod = 1e9 + 7;
int inf = 1000000000000000000;

void solve() {
    int n, d;
    cin >> n >> d;
    vector<int> a(n + 1);
    for (int i = 1; i <= n; ++i)
        cin >> a[i];
    vector<vector<double>> dp(n + 1, vector<double>(10, -1));
    vector<vector<int>> parent(n + 1, vector<int>(10, -1));

    dp[0][1] = 1;
    for (int i = 1; i <= n; ++i) {
        for (int j = 0; j < 10; ++j) {
            dp[i][j] = dp[i - 1][j];
            parent[i][j] = -1;
        }
        for (int j = 0; j < 10; ++j) {
            int proc = (j * a[i]) % 10;
            if (dp[i - 1][j] >= 0.0) {
                double val = dp[i - 1][j] + log10((double) a[i]);
                if (val > dp[i][proc]) {
                    parent[i][proc] = j;
                    dp[i][proc] = val;
                }
            }
        }
    }
    vector<int> ans;
    int cur = d;
    for (int i = n; i > 0; --i) {
        if (parent[i][cur] != -1) {
            ans.push_back(a[i]);
            cur = parent[i][cur];
        }
    }
    if (ans.empty())
        cout << -1;
    else {
        cout << sz(ans) << "\n";
        for (auto next:ans)
            cout << next << " ";
    }

}


signed main() {
//    freopen("input.txt", "r", stdin);
//    freopen("output.txt", "w", stdout);
    ios;
//    int t;
//    cin >> t;
//    while (t-- > 0)
    solve();
    return 0;

}