Color all boxes in line such that every M consecutive boxes are unique
Given N boxes that are kept in a straight line and M colors such that M ? N. The position of the boxes cannot be changed. The task is to find the number of ways to color the boxes such that if any M consecutive set of boxes is considered then the color of each box is unique. Since the answer could be large, print the answer modulo 109 + 7.
Example:
Input: N = 3, M = 2
Output: 2
If colours are c1 and c2 the only possible
ways are {c1, c2, c1} and {c2, c1, c2}.
Input: N = 13, M = 10
Output: 3628800
Approach: The number of ways are independent of N and only depends on M. First M boxes can be coloured with the given M colours without repetition then the same pattern can be repeated for the next set of M boxes. This can be done for every permutation of the colours. So, the number of ways to color the boxes will be M!.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
#define MOD 1000000007
int modFact( int n, int m)
{
int result = 1;
for ( int i = 1; i <= m; i++)
result = (result * i) % MOD;
return result;
}
int main()
{
int n = 3, m = 2;
cout << modFact(n, m);
return 0;
}
|
Java
class GFG
{
static final int MOD = 1000000007 ;
static int modFact( int n, int m)
{
int result = 1 ;
for ( int i = 1 ; i <= m; i++)
result = (result * i) % MOD;
return result;
}
public static void main (String[] args)
{
int n = 3 , m = 2 ;
System.out.println(modFact(n, m));
}
}
|
Python3
MOD = 1000000007
def modFact(n, m) :
result = 1
for i in range ( 1 , m + 1 ) :
result = (result * i) % MOD
return result
n = 3
m = 2
print (modFact(n, m))
|
C#
using System;
class GFG
{
const int MOD = 1000000007;
static int modFact( int n, int m)
{
int result = 1;
for ( int i = 1; i <= m; i++)
result = (result * i) % MOD;
return result;
}
public static void Main()
{
int n = 3, m = 2;
Console.WriteLine(modFact(n, m));
}
}
|
Javascript
<script>
const MOD = 1000000007;
function modFact(n, m)
{
let result = 1;
for (let i = 1; i <= m; i++)
result = (result * i) % MOD;
return result;
}
let n = 3, m = 2;
document.write(modFact(n, m));
</script>
|
Time Complexity: O(m)
Auxiliary Space: O(1)
Last Updated :
13 Mar, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...