#include #include #include #include #include #include #include #include #define debug_value(x) cerr << "line" << __LINE__ << ":<" << __func__ << ">:" << #x << "=" << x << endl; #define debug(x) cerr << "line" << __LINE__ << ":<" << __func__ << ">:" << x << endl; template inline bool chmax(T& a, T b) { if (a < b) { a = b; return 1; } return 0; } template inline bool chmin(T& a, T b) { if (a > b) { a = b; return 1; } return 0; } using namespace std; typedef long long ll; ll fac[21]; void init(){ fac[0] = 1; for(int i = 1; i <= 20; i++) { fac[i] = fac[i-1]*i; assert(fac[i] < __LONG_LONG_MAX__); } } int main(){ ios::sync_with_stdio(false); cin.tie(0); cout << setprecision(10) << fixed; init(); ll n, s; cin >> n >> s; vector idx(s); vector p(s); vector used(s, false); for(int i = 0; i < s; i++){ ll m = n/fac[s-i-1]; n %= fac[s-i-1]; int cnt = 0; for(int j = 0; ; j++){ if(!used[j]) { if(cnt == m){ used[j] = true; p[i] = j; idx[j] = i; break; } cnt++; } } } ll ans = 0; for(int i = 0; i < s; i++){ int inv_cnt = 0; for(int j = i+1; j < s; j++){ if(idx[i] > idx[j]) inv_cnt++; } ans += fac[s-i-1]*inv_cnt; } cout << ans << endl; }