Open In App

Color all boxes in line such that every M consecutive boxes are unique

Improve
Improve
Improve
Like Article
Like
Save Article
Save
Share
Report issue
Report

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:
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++




// C++ implementation of the approach
#include <bits/stdc++.h>
using namespace std;
 
#define MOD 1000000007
 
// Function to return (m! % MOD)
int modFact(int n, int m)
{
    int result = 1;
    for (int i = 1; i <= m; i++)
        result = (result * i) % MOD;
 
    return result;
}
 
// Driver code
int main()
{
    int n = 3, m = 2;
 
    cout << modFact(n, m);
 
    return 0;
}


Java




// Java implementation of the above approach
class GFG
{
    static final int MOD = 1000000007;
     
    // Function to return (m! % MOD)
    static int modFact(int n, int m)
    {
        int result = 1;
        for (int i = 1; i <= m; i++)
            result = (result * i) % MOD;
     
        return result;
    }
     
    // Driver code
    public static void main (String[] args)
    {
        int n = 3, m = 2;
     
        System.out.println(modFact(n, m));
    }
}
 
// This code is contributed by AnkitRai01


Python3




# Python3 implementation of the approach
MOD = 1000000007
 
# Function to return (m! % MOD)
def modFact(n, m) :
     
    result = 1
    for i in range(1, m + 1) :
        result = (result * i) % MOD
 
    return result
 
# Driver code
n = 3
m = 2
 
print(modFact(n, m))
 
# This code is contributed by
# divyamohan123


C#




// C# implementation of the above approach
using System;
class GFG
{
    const int MOD = 1000000007;
     
    // Function to return (m! % MOD)
    static int modFact(int n, int m)
    {
        int result = 1;
        for (int i = 1; i <= m; i++)
            result = (result * i) % MOD;
     
        return result;
    }
     
    // Driver code
    public static void Main()
    {
        int n = 3, m = 2;
     
        Console.WriteLine(modFact(n, m));
    }
}
 
// This code is contributed by Nidhi_biet


Javascript




<script>
// Javascript implementation of the approach
 
const MOD = 1000000007;
 
// Function to return (m! % MOD)
function modFact(n, m)
{
    let result = 1;
    for (let i = 1; i <= m; i++)
        result = (result * i) % MOD;
 
    return result;
}
 
// Driver code
    let n = 3, m = 2;
 
    document.write(modFact(n, m));
 
</script>


Output: 

2

 

Time Complexity: O(m)

Auxiliary Space: O(1)



Last Updated : 13 Mar, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads