#include <bits/stdc++.h>   using namespace std;   namespace FFT {   const int N = 20;   const int MAXN = (1 << N);   class cmplx {    private:     double x, y;       public:     cmplx() : x(0.0), y(0.0) {}     cmplx(double a) : x(a), y(0.0) {}     cmplx(double a, double b) : x(a), y(b) {}     double get_real() { return this->x; }     double get_img() { return this->y; }     cmplx conj() { return cmplx(this->x, -(this->y)); }     cmplx operator=(const cmplx& a) {       this->x = a.x;       this->y = a.y;       return *this;     }     cmplx operator+(const cmplx& b) {       return cmplx(this->x + b.x, this->y + b.y);     }     cmplx operator-(const cmplx& b) {       return cmplx(this->x - b.x, this->y - b.y);     }     cmplx operator*(const double& num) {       return cmplx(this->x * num, this->y * num);     }     cmplx operator/(const double& num) {       return cmplx(this->x / num, this->y / num);     }     cmplx operator*(const cmplx& b) {       return cmplx(this->x * b.x - this->y * b.y, this->y * b.x + this->x * b.y);     }     cmplx operator/(const cmplx& b) {       cmplx temp(b.x, -b.y);       cmplx n = (*this) * temp;       return n / (b.x * b.x + b.y * b.y);     }   };   cmplx w[MAXN];   cmplx f1[MAXN];   int rev[MAXN];   void ReserveBits(int k) {     static int rk = -1, lim;     if (k == rk) return;     rk = k, lim = 1 << k;     for (int i = 1; i <= lim; ++i) {       int j = rev[i - 1], t = k - 1;       while (t >= 0 && ((j >> t) & 1)) {         j ^= 1 << t;         --t;       }       if (t >= 0) {         j ^= 1 << t;         --t;       }       rev[i] = j;     }   }   void fft(cmplx* a, int k) {     ReserveBits(k);     int n = 1 << k;     for (int i = 0; i < n; ++i)       if (rev[i] > i) swap(a[i], a[rev[i]]);     for (int l = 2, m = 1; l <= n; l += l, m += m) {       if (w[m].get_real() == 0 && w[m].get_img() == 0) {         double angle = M_PI / m;         cmplx ww(cos(angle), sin(angle));         if (m > 1) {           for (int j = 0; j < m; ++j) {             if (j & 1)               w[m + j] = w[(m + j) / 2] * ww;             else               w[m + j] = w[(m + j) / 2];           }         } else           w[m] = cmplx(1, 0);       }       for (int i = 0; i < n; i += l) {         for (int j = 0; j < m; ++j) {           cmplx v = a[i + j], u = a[i + j + m] * w[m + j];           a[i + j] = v + u;           a[i + j + m] = v - u;         }       }     }   }   vector<long long> mul(vector<long long> a, vector<long long> b) {     int k = 1;     while ((1 << k) < (a.size() + b.size())) ++k;     int n = (1 << k);     for (int i = 0; i < n; ++i) f1[i] = cmplx(0, 0);     for (int i = 0; i < a.size(); ++i) f1[i] = f1[i] + cmplx(a[i], 0);     for (int i = 0; i < b.size(); ++i) f1[i] = f1[i] + cmplx(0, b[i]);     fft(f1, k);     for (int i = 0; i <= n / 2; ++i) {       cmplx p = f1[i] + f1[(n - i) % n].conj();       cmplx _q = f1[(n - i) % n] - f1[i].conj();       cmplx q(_q.get_img(), _q.get_real());       f1[i] = (p * q) * 0.25;       if (i > 0) f1[(n - i)] = f1[i].conj();     }     for (int i = 0; i < n; ++i) f1[i] = f1[i].conj();     fft(f1, k);     vector<long long> ans(a.size() + b.size() - 1);     for (int i = 0; i < ans.size(); ++i) {       ans[i] = (long long)(f1[i].get_real() / n + 0.5);     }     return ans;   }   };  // namespace FFT   int buff = 2e5 + 5;   int main() {     ios_base::sync_with_stdio(false);     long long int n, x;     long long int an[200005];     cin >> n >> x;     long long int nn = 2 * buff + 5;     vector<long long int> v(nn, 0);     vector<long long int> v1(nn, 0);     v[0] = 1;     v1[buff] = 1;     long long int cool = 0;     for (int i = 0; i <= n - 1; i++) {       long long int xx;       cin >> xx;       if (xx < x) cool++;       an[0] += v[cool];       v[cool]++;       v1[buff - cool]++;     }     vector<long long int> res = FFT::mul(v, v1);     int sz = res.size();     an[0] = (n * (n + 1)) / 2;     for (int i = buff + 1; i <= buff + n; i++) {       an[i - buff] = res[i];       an[0] -= res[i];     }     for (int i = 0; i <= n; i++) {       cout << an[i];       cout <<    ;     }     return 0;   }