7
ll solve(int unique, int taken, int k) {8
if (unique > N || (taken == target && unique < N)) return 0;9
if (taken == target) return 1;13
if (dp[unique][taken] != -1) return dp[unique][taken];15
// first time adding a new song16
ans = (solve(unique + 1, taken + 1, k) * (N - unique)) % mod;18
// repeat from already chosen songs19
int val = solve(unique, taken + 1, k) * max(0, unique - k) % mod;23
return dp[unique][taken] = ans;26
int numMusicPlaylists(int n, int goal, int k) {27
memset(dp, -1, sizeof(dp));29
return solve(0, 0, k);