Problem: Diana loves playing with numbers. She's got n cards with positive integer numbers a_i written on them. She spends her free time multiplying the numbers on the cards. She picks a non-empty subset of the cards and multiplies all the numbers a_i written on them.

Diana is happy when the product of the numbers ends with her favorite digit d. Now she is curious what cards she should pick so that the product of the numbers on them is the largest possible and the last decimal digit of the product is d. Please, help her.

Input

The first line contains the integers n and d (1≤ n≤ 10^5, 0≤ d≤ 9). The second line contains n integers a_i (1≤ a_i≤ 1000). 

Output

On the first line, print the number of chosen cards k (1≤ k≤ n). On the next line, print the numbers written on the chosen cards in any order. 

If it is impossible to choose a subset of cards with the product that ends with the digit d, print the single line with -1.

Examples

Input


6 4
4 11 8 2 1 13


Output


5
1 2 4 11 13 


Input


3 1
2 4 6


Output


-1


Input


5 7
1 3 1 5 3


Output


-1


Input


6 3
8 9 4 17 11 5


Output


3
9 11 17 


Input


5 6
2 2 2 2 2


Output


4
2 2 2 2 

Note

In the first example, 1 × 2 × 4 × 11 × 13 = 1144, which is the largest product that ends with the digit 4. The same set of cards without the number 1 is also a valid answer, as well as a set of 8, 11, and 13 with or without 1 that also has the product of 1144.

In the second example, all the numbers on the cards are even and their product cannot end with an odd digit 1.

In the third example, the only possible products are 1, 3, 5, 9, 15, and 45, none of which end with the digit 7.

In the fourth example, 9 × 11 × 17 = 1683, which ends with the digit 3. 

In the fifth example, 2 × 2 × 2 × 2 = 16, which ends with the digit 6.

Solution (in CPP):

Solution:
//#include<bitsdc++.h>
#include<map>
#include<queue>
#include<time.h>
#include<limits.h>
#include<cmath>
#include<ostream>
#include<iterator>
#include<set>
#include<stack>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define endl '\n'
#define rep_1(i,m,n) for(int i=m;i<=n;i++)
#define mem(st) memset(st,0,sizeof st)
//namespace first_space
//{
//	int a=10;
//	void func()
//	{
//		cout << "Inside first_space" << endl;
//	}
//}
int read()
{
	int res=0,ch,flag=0;
	if((ch=getchar())=='-')             //判断正负
		flag=1;
	else if(ch>='0'&&ch<='9')           //得到完整的数
		res=ch-'0';
	while((ch=getchar())>='0'&&ch<='9')
		res=res*10+ch-'0';
	return flag?-res:res;
}

typedef long long ll;
typedef pair<int,int> pii;
typedef unsigned long long ull;
typedef pair<double,double> pdd;
const int inf = 0x3f3f3f3f;
const double eps = 1e-8;
const int N=1e5+10;
int n, d, pre[N][10];
int lst[N][10], ans[N], a[N];
bool st[N][10];//是否出现过
double f[100009][10];
void solve()
{
	cin>>n>>d;
	//f[i][10]表示前i个数组成结尾为x的最大成绩
	for(int i=1; i<=n; i++)
		cin>>a[i];
	for(int j=0; j<10; j++)
		f[0][j]=-1;
	for(int i=1; i<=n; i++)
	{
		for(int j=0; j<10; j++)
		{
			f[i][j]=f[i-1][j];
			pre[i][j]=pre[i-1][j];
			lst[i][j]=lst[i-1][j];
			st[i][j]=0;
		}
		int x=a[i];
		//当前这一个数单独成集合
		if(log(x)>f[i][x%10]+eps)
		{
			f[i][x%10]=log(x);//单独成集合
			lst[i][x%10]=i;//上一个元素的位置 也就是当前的元素的位置
			pre[i][x%10]=0;//
			st[i][x%10]=1;//标记出现过
		}
		//更新最大值
		for(int j=0; j<10; j++)
			if(f[i-1][j]!=-1)
			{
				if(log(x)+f[i-1][j]>f[i][x*j%10]+eps)
				{
					f[i][x*j%10]=log(x)+f[i-1][j];//更新最大值 
					lst[i][x*j%10]=i;//当前集合最后一个元素 
					pre[i][x*j%10]=j;//上一个元素 
					st[i][x*j%10]=0;//表示当前元素不是集合的最后一个 
				}
			}
	}

	int cnt=0,nowi=n,nowj=d;
	//如果没出现过 
	
	if(f[n][d]<eps)
	{
		cout<<"-1"<<endl; 
		return;
	}
	//最后一个出现的位置 
	nowi=lst[nowi][nowj];
	//当为0的时候  表示不是集合的最后一个 
	while(st[nowi][nowj]==0)
	{
		//把当前元素加入 
		ans[++cnt]=a[nowi];
		//除去当前数字 剩下的数字乘积的最后一位 
		nowj=pre[nowi][nowj];
		//哪个数字 
		nowi=lst[nowi-1][nowj];
	}
	ans[++cnt]=a[nowi];
	sort(ans+1,ans+1+cnt);
	cout<<cnt<<endl;
	for(int i=1; i<=cnt; i++)
		cout<<ans[i]<<" ";
}
signed main()
{
	int t=1;
	while(t--)
		solve();
	return 0;
}