#pragma GCC optimize("O3,unroll-loops")
#include <bits/stdc++.h>
using namespace std;
#define name "aaaaaa"
#define endl "\n"
#define fi first
#define se second
using ll = long long;
using db = double;
using ld = long double;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
using ppii = pair<int, pii>;
using vi = vector<int>;
using vll = vector<ll>;
using vd = vector<double>;
using pdb = pair<db, db>;
int n, x;
map<set<int>, int> mp;
void backtrack(int id, vector<int> v, int lst, int sum = 0){
if(id >= 1){
if(sum - v[0] > x) return;
}
if(id >= 1){
set<int> s;
bool ck = true;
for(int i : v){
if(sum - i < 1 || sum - i > x) ck = false;
s.insert(sum - i);
}
if(ck && s.size() == n){
mp[s] = true;
}
}
if(id == x + 1) return;
for(int i = lst; i <= x; i++){
v.push_back(i);
backtrack(id + 1, v, i, sum + i);
v.pop_back();
}
}
int gay(int n2, int x2){
n = n2, x = x2;
mp.clear();
vector<int> empt;
backtrack(0, empt, 1);
return mp.size();
}
void solve(){
for(int i = 1; i <= 10; i++){
for(int j = 1; j <= 30; j++){
cout << gay(i, j) << ' ';
}
cout << endl;
}
}
int main(){
ios_base::sync_with_stdio(0); cin.tie(0);
if(fopen(name".inp", "r")) {
freopen(name".inp", "r", stdin);
freopen(name".out", "w", stdout);
}
int test = 1;
//cin >> test;
while(test--){
solve();
}
}
I3ByYWdtYSBHQ0Mgb3B0aW1pemUoIk8zLHVucm9sbC1sb29wcyIpCiNpbmNsdWRlIDxiaXRzL3N0ZGMrKy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwojZGVmaW5lIG5hbWUgImFhYWFhYSIKI2RlZmluZSBlbmRsICJcbiIKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAp1c2luZyBsbCA9IGxvbmcgbG9uZzsKdXNpbmcgZGIgPSBkb3VibGU7CnVzaW5nIGxkID0gbG9uZyBkb3VibGU7CnVzaW5nIHBpaSA9IHBhaXI8aW50LCBpbnQ+Owp1c2luZyBwbGwgPSBwYWlyPGxsLCBsbD47CnVzaW5nIHBwaWkgPSBwYWlyPGludCwgcGlpPjsKdXNpbmcgdmkgPSB2ZWN0b3I8aW50PjsKdXNpbmcgdmxsID0gdmVjdG9yPGxsPjsKdXNpbmcgdmQgPSB2ZWN0b3I8ZG91YmxlPjsKdXNpbmcgcGRiID0gcGFpcjxkYiwgZGI+OwoKaW50IG4sIHg7CgptYXA8c2V0PGludD4sIGludD4gbXA7Cgp2b2lkIGJhY2t0cmFjayhpbnQgaWQsIHZlY3RvcjxpbnQ+IHYsIGludCBsc3QsIGludCBzdW0gPSAwKXsKICAgIGlmKGlkID49IDEpewogICAgICAgIGlmKHN1bSAtIHZbMF0gPiB4KSByZXR1cm47CiAgICB9CiAgICBpZihpZCA+PSAxKXsKICAgICAgICBzZXQ8aW50PiBzOwogICAgICAgIGJvb2wgY2sgPSB0cnVlOwogICAgICAgIGZvcihpbnQgaSA6IHYpewogICAgICAgICAgICBpZihzdW0gLSBpIDwgMSB8fCBzdW0gLSBpID4geCkgY2sgPSBmYWxzZTsKICAgICAgICAgICAgcy5pbnNlcnQoc3VtIC0gaSk7CiAgICAgICAgfQogICAgICAgIGlmKGNrICYmIHMuc2l6ZSgpID09IG4pewogICAgICAgICAgICBtcFtzXSA9IHRydWU7CiAgICAgICAgfQogICAgfQogICAgaWYoaWQgPT0geCArIDEpIHJldHVybjsKICAgIGZvcihpbnQgaSA9IGxzdDsgaSA8PSB4OyBpKyspewogICAgICAgIHYucHVzaF9iYWNrKGkpOwogICAgICAgIGJhY2t0cmFjayhpZCArIDEsIHYsIGksIHN1bSArIGkpOwogICAgICAgIHYucG9wX2JhY2soKTsKICAgIH0KfQoKaW50IGdheShpbnQgbjIsIGludCB4Mil7CiAgICBuID0gbjIsIHggPSB4MjsKICAgIG1wLmNsZWFyKCk7CiAgICB2ZWN0b3I8aW50PiBlbXB0OwogICAgYmFja3RyYWNrKDAsIGVtcHQsIDEpOwogICAgcmV0dXJuIG1wLnNpemUoKTsKfQoKdm9pZCBzb2x2ZSgpewogICAgZm9yKGludCBpID0gMTsgaSA8PSAxMDsgaSsrKXsKICAgICAgICBmb3IoaW50IGogPSAxOyBqIDw9IDMwOyBqKyspewogICAgICAgICAgICBjb3V0IDw8IGdheShpLCBqKSA8PCAnICc7CiAgICAgICAgfQogICAgICAgIGNvdXQgPDwgZW5kbDsKICAgIH0KfQoKaW50IG1haW4oKXsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7IGNpbi50aWUoMCk7CiAgICBpZihmb3BlbihuYW1lIi5pbnAiLCAiciIpKSB7CiAgICAgICAgZnJlb3BlbihuYW1lIi5pbnAiLCAiciIsIHN0ZGluKTsKICAgICAgICBmcmVvcGVuKG5hbWUiLm91dCIsICJ3Iiwgc3Rkb3V0KTsKICAgIH0KCiAgICBpbnQgdGVzdCA9IDE7CiAgICAvL2NpbiA+PiB0ZXN0OwogICAgd2hpbGUodGVzdC0tKXsKICAgICAgICBzb2x2ZSgpOwogICAgfQp9Cg==