Problem: Our child likes computer science very much, especially he likes binary trees.

Consider the sequence of n distinct positive integers: c1, c2, ..., cn. The child calls a vertex-weighted rooted binary tree good if and only if for every vertex v, the weight of v is in the set {c1, c2, ..., cn}. Also our child thinks that the weight of a vertex-weighted tree is the sum of all vertices' weights.

Given an integer m, can you for all s (1 ≤ s ≤ m) calculate the number of good vertex-weighted rooted binary trees with weight s? Please, check the samples for better understanding what trees are considered different.

We only want to know the answer modulo 998244353 (7 × 17 × 223 + 1, a prime number).

Input

The first line contains two integers n, m (1 ≤ n ≤ 105; 1 ≤ m ≤ 105). The second line contains n space-separated pairwise distinct integers c1, c2, ..., cn. (1 ≤ ci ≤ 105).

Output

Print m lines, each line containing a single integer. The i-th line must contain the number of good vertex-weighted rooted binary trees whose weight exactly equal to i. Print the answers modulo 998244353 (7 × 17 × 223 + 1, a prime number).

Examples

Input

2 3
1 2


Output

1
3
9


Input

3 10
9 4 3


Output

0
0
1
1
0
2
4
2
6
15


Input

5 10
13 10 6 4 15


Output

0
0
0
1
0
1
0
2
0
5

Note

In the first example, there are 9 good vertex-weighted rooted binary trees whose weight exactly equal to 3:

<image>

Solution (in CPP):

Solution:
#include <bits/stdc++.h>
using namespace std;
int n, m, x, le, f[262145], g[262145], A[262145], B[262145], C[262145];
int ksm(int x, int y) {
  int g = 1;
  for (; y; y >>= 1, x = 1ll * x * x % 998244353)
    if (y & 1) g = 1ll * g * x % 998244353;
  return g;
}
void ntt(int *a, int n, int o) {
  int i, j, k, wn, w, t;
  for (i = k = 0; i < n; i++) {
    if (i > k) swap(a[i], a[k]);
    for (j = (n >> 1); (k ^= j) < j; j >>= 1)
      ;
  }
  for (k = 2, wn = ksm(3, o > 0 ? (998244353 - 1) / k
                                : 998244353 - 1 - (998244353 - 1) / k);
       k <= n;
       k <<= 1, wn = ksm(3, o > 0 ? (998244353 - 1) / k
                                  : 998244353 - 1 - (998244353 - 1) / k))
    for (w = 1, i = 0; i < n; i += k, w = 1)
      for (j = 0; j < (k >> 1); j++, w = 1ll * w * wn % 998244353)
        t = 1ll * w * a[i + j + (k >> 1)] % 998244353,
        a[i + j + (k >> 1)] = (a[i + j] - t + 998244353) % 998244353,
        a[i + j] = (a[i + j] + t) % 998244353;
  if (o < 0)
    for (i = 0, t = ksm(n, 998244353 - 2); i < n; i++)
      a[i] = 1ll * a[i] * t % 998244353;
}
void mul(int *a, int *b, int n) {
  ntt(a, n * 2, 1);
  ntt(b, n * 2, 1);
  for (int i = 0; i < n * 2; i++) a[i] = 1ll * a[i] * b[i] % 998244353;
  ntt(a, n * 2, -1);
}
void mul(int *a, int n) {
  ntt(a, n * 2, 1);
  for (int i = 0; i < n * 2; i++) a[i] = 1ll * a[i] * a[i] % 998244353;
  ntt(a, n * 2, -1);
}
void inv(int *a, int *b, int n) {
  if (n == 1) {
    b[0] = ksm(a[0], 998244353 - 2);
    return;
  }
  inv(a, b, n / 2);
  for (int i = 0; i < n; i++) A[i] = a[i], B[i] = b[i];
  mul(B, n);
  mul(A, B, n);
  for (int i = 0; i < n; i++)
    b[i] = ((2 * b[i]) % 998244353 - A[i] + 998244353) % 998244353;
  for (int i = 0; i < n * 2; i++) A[i] = B[i] = 0;
}
void sqr(int *a, int *b, int n) {
  if (n == 1) {
    b[0] = 1;
    return;
  }
  sqr(a, b, n / 2);
  inv(b, C, n);
  for (int i = 0; i < n; i++) A[i] = a[i], B[i] = b[i];
  for (int i = 0; i < n; i++) C[i] = 1ll * C[i] * 499122177 % 998244353;
  mul(B, n);
  for (int i = 0; i < n; i++) B[i] = (B[i] + A[i]) % 998244353;
  mul(B, C, n);
  for (int i = 0; i < n; i++) b[i] = B[i];
  for (int i = 0; i < 2 * n; i++) A[i] = B[i] = C[i] = 0;
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; i++) {
    scanf("%d", &x);
    if (x <= m) f[x] = 1;
  }
  for (le = 1; le <= m; le <<= 1)
    ;
  for (int i = 0; i < le; i++)
    if (f[i]) f[i] = 998244353 - 4;
  f[0] = 1;
  sqr(f, g, le);
  (g[0] += 1) %= 998244353;
  memset(f, 0, sizeof(f));
  inv(g, f, le);
  for (int i = 1; i <= m; i++) printf("%d\n", (f[i] + f[i]) % 998244353);
}