Mixing Invitations

Kelly is having a birthday party soon, and would like to invite all her friends to come. There is one problem though: her house is far too small to accommodate every- one! She has already written up personalised invitations to all her friends with corresponding addressed envelopes to mail them in, and now she doesn’t know what to do. Luckily, Alex has thought of a clever way to help Kelly out. He knows that if a friend receives an invitation per- sonalised to him or her, that friend will definitely come to the party. However, if a friend receives an invitation per- sonalised to someone else (ie. the wrong invitation), that friend will surely not come to the party. Alex then goes to mix up Kelly’s invitations and envelopes so that some in- vitations may be mailed to the wrong addressee. This way everyone still gets an invitation and nobody is left out, but no more people would come than would fit into Kelly’s house. There are exactly as many envelopes as there are invitations, and each invitation has a corresponding envelope with the same addressee. Alex must place each invitation into an envelope in such a way that there are no more invitations in their correct envelopes than the amount of people Kelly can accommodate. Being the clever mathematician that he is, Alex would like to count the number of ways that he can mix up the invitations and envelopes to accomplish his goal. Can you write a program to do this for Alex? Input The input file contains several test cases, each on a separate line. Each line contains two positive integers, N and M, separated by a space. N (1 ≤ N ≤ 20) is the number of invitations Kelly has written, and M (0 ≤ M ≤ N) is the maximum number of people Kelly can accommodate. Output For each test case, output on a separate line a single integer: the number of ways Alex can mix up the invitations and envelopes to accomplish his goal. Sample Input 32 41 44 Sample Output 5 17 24