# Number of ways to distribute N Paper Set among M students

Given N students and a total of M sets of question paper where M ≤ N. All the M sets are different and every sets is available in sufficient quantity. All the students are sitting in a single row. The task is to find the number of ways to distribute the question paper so that if any M consecutive students are selected then each student has a unique question paper set. The answer could be large, so print the answer modulo 109 + 7.

Example:

Input: N = 2, M = 2
Output: 2
(A, B) and (B, A) are the only possible ways.

Input: N = 15, M = 4
Output: 24

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach: It can be observed that the number of ways are independent of N and only depend on M. First M students can be given M sets and then the same pattern can be repeated. The number of ways to distribute the question paper in this way is M!. For example,

N = 6, M = 3
A, B, C, A, B, C
A, C, B, A, C, B
B, C, A, B, C, A
B, A, C, B, A, C
C, A, B, C, A, B
C, B, A, C, B, A

Below is the implementation of the above approach:

## C++

 `// C++ implementation of the approach ` `#include ` `using` `namespace` `std; ` ` `  `const` `int` `MOD = 1000000007; ` ` `  `// Function to return n! % 1000000007 ` `int` `factMod(``int` `n) ` `{ ` ` `  `    ``// To store the factorial ` `    ``long` `fact = 1; ` ` `  `    ``// Find the factorial ` `    ``for` `(``int` `i = 2; i <= n; i++) { ` `        ``fact *= (i % MOD); ` `        ``fact %= MOD; ` `    ``} ` ` `  `    ``return` `fact; ` `} ` ` `  `// Function to return the ` `// count of possible ways ` `int` `countWays(``int` `n, ``int` `m) ` `{ ` `    ``return` `factMod(m); ` `} ` ` `  `// Driver code ` `int` `main() ` `{ ` `    ``int` `n = 2, m = 2; ` ` `  `    ``cout << countWays(n, m); ` ` `  `    ``return` `0; ` `} `

## Java

 `// Java implementation of the approach ` `import` `java.util.*; ` ` `  `class` `GFG ` `{ ` `static` `int` `MOD = ``1000000007``; ` ` `  `// Function to return n! % 1000000007 ` `static` `int` `factMod(``int` `n) ` `{ ` ` `  `    ``// To store the factorial ` `    ``long` `fact = ``1``; ` ` `  `    ``// Find the factorial ` `    ``for` `(``int` `i = ``2``; i <= n; i++)  ` `    ``{ ` `        ``fact *= (i % MOD); ` `        ``fact %= MOD; ` `    ``} ` `    ``return` `(``int``)fact; ` `} ` ` `  `// Function to return the ` `// count of possible ways ` `static` `int` `countWays(``int` `n, ``int` `m) ` `{ ` `    ``return` `factMod(m); ` `} ` ` `  `// Driver code ` `public` `static` `void` `main(String args[]) ` `{ ` `    ``int` `n = ``2``, m = ``2``; ` ` `  `    ``System.out.print(countWays(n, m)); ` `} ` `} ` ` `  `// This code is contributed by Arnab Kundu `

## Python3

 `# Python3 implementation of the approach  ` `MOD ``=` `1000000007``;  ` ` `  `# Function to return n! % 1000000007  ` `def` `factMod(n) :  ` ` `  `    ``# To store the factorial  ` `    ``fact ``=` `1``;  ` ` `  `    ``# Find the factorial  ` `    ``for` `i ``in` `range``(``2``, n ``+` `1``) : ` `        ``fact ``*``=` `(i ``%` `MOD);  ` `        ``fact ``%``=` `MOD;  ` ` `  `    ``return` `fact;  ` ` `  `# Function to return the  ` `# count of possible ways  ` `def` `countWays(n, m) :  ` ` `  `    ``return` `factMod(m); ` ` `  `# Driver code  ` `if` `__name__ ``=``=` `"__main__"` `:  ` ` `  `    ``n ``=` `2``; m ``=` `2``;  ` ` `  `    ``print``(countWays(n, m)); ` ` `  `# This code is contributed by AnkitRai01 `

## C#

 `// C# implementation of the approach ` `using` `System; ` ` `  `class` `GFG ` `{ ` `    ``static` `int` `MOD = 1000000007; ` `     `  `    ``// Function to return n! % 1000000007 ` `    ``static` `int` `factMod(``int` `n) ` `    ``{ ` `        ``// To store the factorial ` `        ``int` `fact = 1; ` `     `  `        ``// Find the factorial ` `        ``for` `(``int` `i = 2; i <= n; i++)  ` `        ``{ ` `            ``fact *= (i % MOD); ` `            ``fact %= MOD; ` `        ``} ` `        ``return` `fact; ` `    ``} ` ` `  `    ``// Function to return the ` `    ``// count of possible ways ` `    ``static` `int` `countWays(``int` `n, ``int` `m) ` `    ``{ ` `        ``return` `factMod(m); ` `    ``} ` `     `  `    ``// Driver code ` `    ``public` `static` `void` `Main() ` `    ``{ ` `        ``int` `n = 2, m = 2; ` `        ``Console.Write(countWays(n, m));  ` `    ``}  ` `} ` ` `  `// This code is contributed by Sanjit Prasad `

Output:

```2
``` My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.