All Tracks Math Problem

Counting permutations
/

C++, Counting, Math, Mathamatics, Special Numbers

Problem
Editorial
Analytics

You are given two integers \(n\) and \(m\). You are required to find the number of permutations of \(n\) such that for each \(i\) the \(|a_i - i| ≠ m\) where \(|x - y|\) denotes the absolute difference between \(x\) and \(y\).

Example:

Here, \(n = 4\) and \(m = 3\), therefore, the valid permutations are \([2\ 4\ 1\ 3]\), \([1\ 3\ 4\ 2]\), and so on. The invalid permutations for the same are \([4\ 1\ 3\ 2]\), \([3\ 2\ 4\ 1]\), and so on.

Note: As the number can be large, print answer modulo \(1000000007\).

Input format

The first line contains two integers \(n\) and \(m\).

Output format

Print one integer denoting the number of permutations that are valid. As the number can be very large, print answer modulo \(1000000007\).

Constraints

 \(2 ≤ n ≤ 1e3\\ 1 ≤ m < n\)

SAMPLE INPUT
4 3
SAMPLE OUTPUT
14
Explanation

Valid Permutations:

1 2 3 4 
1 2 4 3 
1 3 2 4 
1 3 4 2 
1 4 2 3 
1 4 3 2 
2 1 3 4 
2 1 4 3 
2 3 1 4 
2 4 1 3 
3 1 2 4 
3 1 4 2 
3 2 1 4 
3 4 1 2 
 

Invalid Permutations

2 3 4 1 
2 4 3 1 
3 2 4 1 
3 4 2 1 
4 1 2 3 
4 1 3 2 
4 2 1 3 
4 2 3 1 
4 3 1 2 
4 3 2 1 

Time Limit: 1.0 sec(s) for each input file.
Memory Limit: 256 MB
Source Limit: 1024 KB

Best Submission

Similar Problems

Contributors

This Problem was Asked in

Initializing Code Editor...
Notifications
View All Notifications

?