Nikita likes tasks on order statistics, for example, he can easily find the $k$-th number in increasing order on a segment of an array. But now Nikita wonders how many segments of an array there are such that a given number $x$ is the $k$-th number in increasing order on this segment. In other words, you should find the number of segments of a given array such that there are exactly $k$ numbers of this segment which are less than $x$.

Nikita wants to get answer for this question for each $k$ from $0$ to $n$, where $n$ is the size of the array.


-----Input-----

The first line contains two integers $n$ and $x$ $(1 \le n \le 2 \cdot 10^5, -10^9 \le x \le 10^9)$.

The second line contains $n$ integers $a_1, a_2, \ldots, a_n$ $(-10^9 \le a_i \le 10^9)$ — the given array.


-----Output-----

Print $n+1$ integers, where the $i$-th number is the answer for Nikita's question for $k=i-1$.


-----Examples-----
Input
5 3
1 2 3 4 5

Output
6 5 4 0 0 0 
Input
2 6
-5 9

Output
1 2 0 
Input
6 99
-1 -1 -1 -1 -1 -1

Output
0 6 5 4 3 2 1

```python

USER_FILENAME = "<user_code>"
import sys, json, builtins
import math, heapq, bisect, itertools, functools, collections, statistics, fractions, decimal, operator, array, random, re, string, os, pathlib
try:
    import resource as _res
except Exception:
    _res = None
from collections import Counter, defaultdict, deque, OrderedDict
from functools import lru_cache, reduce
from itertools import accumulate, permutations, combinations, product
from math import gcd, ceil, floor, sqrt
from decimal import Decimal
try:
    from typing import *
except Exception:
    pass
try:
    sys.setrecursionlimit(1_000_000)
except Exception:
    pass
try:
    import site as _site
    try:
        _sys_sites = _site.getsitepackages() if hasattr(_site, "getsitepackages") else []
        for _p in _sys_sites:
            if _p and _p not in sys.path:
                sys.path.append(_p)
    except Exception:
        pass
    try:
        _usp = _site.getusersitepackages()
        if isinstance(_usp, str):
            _usp = [_usp]
        for _p in _usp:
            if _p and _p not in sys.path:
                sys.path.append(_p)
    except Exception:
        pass
except Exception:
    pass

ns = {"__name__": "__main__"}
for _k, _v in list(globals().items()):
    if not _k.startswith("_"):
        ns[_k] = _v
_CODE = 'from math import pi\nfrom cmath import exp\ndef fft(a, lgN, rot=1): # rot=-1 for ifft\n  N = 1<<lgN\n  assert len(a)==N\n  rev = [0]*N\n  for i in range(N):\n    rev[i] = (rev[i>>1]>>1)+(i&1)*(N>>1)\n  A = [a[rev[i]] for i in range(N)]\n  h = 1\n  while h<N:\n    w_m = exp((0+1j) * rot * (pi / h))\n    for k in range(0, N, h<<1):\n      w = 1\n      for j in range(h):\n        t = w * A[k+j+h]\n        A[k+j+h] = A[k+j]-t\n        A[k+j] = A[k+j]+t\n        w *= w_m\n    h = h<<1\n  return A if rot==1 else [x/N for x in A]\n\n\nimport sys\nints = (int(x) for x in sys.stdin.read().split())\n\nn, x = (next(ints) for i in range(2))\nr = [next(ints) for i in range(n)]\nac = [0]*(n+1)\nfor i in range(n): ac[i+1] = (r[i]<x) + ac[i]\n\n# Multiset addition\nmin_A, min_B = 0, -ac[-1]\nmax_A, max_B = ac[-1], 0\nN, lgN, m = 1, 0, 2*max(max_A-min_A+1, max_B-min_B+1)\nwhile N<m: N,lgN = N<<1,lgN+1\na, b = [0]*N, [0]*N\nfor x in ac:\n  a[x-min_A] += 1\n  b[-x-min_B] += 1\nc = zip(fft(a, lgN), fft(b, lgN))\nc = fft([x*y for x,y in c], lgN, rot=-1)\nc = [round(x.real) for x in c][-min_A-min_B:][:n+1]\nc[0] = sum((x*(x-1))//2 for x in a)\nprint(*c, *(0 for i in range(n+1-len(c))), flush=True)'
_co = compile(_CODE, USER_FILENAME, "exec")
exec(_co, ns, ns)

```

Measured memory_bytes: 24819