# Find the number of words of X vowels and Y consonants that can be formed from M vowels and N consonants

Given four integers X, Y, M and N. The task is to find the number of ways to form a word by choosing X number of vowels and Y number of consonants from total numbers of M vowels and N consonants.

Examples:

Input : X = 2, Y = 2, M = 3, N = 3
Output : 216
The total number of ways of choosing 2 vowels from a total number of 3 vowels is i.e 3
The total number of ways of choosing 2 consonants from a total number of 3 consonants is i.e 3.
The total number of ways of selecting 2 consonants from 3 and 2 vowels from 3 is * = 9
The total number of ways of arranging 4 letters among themselves = 4! = 24
Hence, the required number of ways = 24 * 9 = 216

Input : X = 1, Y = 2, M = 2, N = 3
Output : 36

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

Approach :

• The total number of ways of choosing X vowels from a total number of M vowels is • The total number of ways of choosing Y consonants from a total number of N consonants is • The total number of ways of selecting Y consonants from N and X vowels from M is * • The total number of ways of arranging (X+Y) letters among themselves = (X+Y)!
• Hence, the required number of ways = (X+Y)! * * Below is the implementation of the above approach:

## C++

 `// CPP program to find the number of words ` `// of X vowels  and Y consonants can be ` `// formed from M vowels and N consonants ` `#include ` `using` `namespace` `std; ` ` `  `// Function to returns factorial of n ` `int` `fact(``int` `n) ` `{ ` `    ``int` `res = 1; ` `    ``for` `(``int` `i = 2; i <= n; i++) ` `        ``res = res * i; ` `    ``return` `res; ` `} ` ` `  `// Function to find nCr ` `int` `nCr(``int` `n, ``int` `r) ` `{ ` `    ``return` `fact(n) / (fact(r) * fact(n - r)); ` `} ` ` `  `// Function to find the number of words ` `// of X vowels  and Y consonants can be ` `// formed from M vowels and N consonants ` `int` `NumberOfWays(``int` `X, ``int` `Y, ``int` `M, ``int` `N) ` `{ ` `    ``return` `fact(X + Y) * nCr(M, X) * nCr(N, Y); ` `} ` ` `  `// Driver code ` `int` `main() ` `{ ` `    ``int` `X = 2, Y = 2, M = 3, N = 3; ` ` `  `    ``// Function call ` `    ``cout << NumberOfWays(X, Y, M, N); ` ` `  `    ``return` `0; ` `} `

## Java

 `// Java program to find the number of words  ` `// of X vowels and Y consonants can be  ` `// formed from M vowels and N consonants ` `import` `java.util.*; ` `import` `java.lang.*; ` `import` `java.io.*; ` ` `  `class` `GFG ` `{ ` `     `  `    ``// Function to returns factorial of n ` `    ``static` `int` `fact(``int` `n)  ` `    ``{  ` `        ``int` `res = ``1``;  ` `        ``for` `(``int` `i = ``2``; i <= n; i++)  ` `            ``res = res * i;  ` `        ``return` `res;  ` `    ``}  ` `     `  `    ``// Function to find nCr  ` `    ``static` `int` `nCr(``int` `n, ``int` `r)  ` `    ``{  ` `        ``return` `fact(n) / (fact(r) *  ` `                          ``fact(n - r));  ` `    ``}  ` `     `  `    ``// Function to find the number of words  ` `    ``// of X vowels and Y consonants can be  ` `    ``// formed from M vowels and N consonants  ` `    ``static` `int` `NumberOfWays(``int` `X, ``int` `Y,  ` `                            ``int` `M, ``int` `N)  ` `    ``{  ` `        ``return` `fact(X + Y) * nCr(M, X) *  ` `                             ``nCr(N, Y);  ` `    ``}  ` `     `  `     `  `    ``// Driver code ` `    ``public` `static` `void` `main (String[] args)  ` `                  ``throws` `java.lang.Exception ` `    ``{ ` `        ``int` `X = ``2``, Y = ``2``, M = ``3``, N = ``3``;  ` `     `  `        ``// Function call  ` `        ``System.out.println(NumberOfWays(X, Y, M, N));          ` `    ``} ` `} ` ` `  `// This code is contributed by Nidhiva `

## Python3

 `# Python 3 program to find the number of words ` `# of X vowels and Y consonants can be ` `# formed from M vowels and N consonants ` ` `  `# Function to returns factorial of n ` `def` `fact(n): ` `    ``res ``=` `1` `    ``for` `i ``in` `range``(``2``, n ``+` `1``, ``1``): ` `        ``res ``=` `res ``*` `i ` `    ``return` `res ` ` `  `# Function to find nCr ` `def` `nCr(n, r): ` `    ``return` `fact(n) ``/``/` `(fact(r) ``*` `fact(n ``-` `r)) ` ` `  `# Function to find the number of words ` `# of X vowels and Y consonants can be ` `# formed from M vowels and N consonants ` `def` `NumberOfWays(X, Y, M, N): ` `    ``return` `fact(X ``+` `Y) ``*` `nCr(M, X) ``*` `nCr(N, Y) ` ` `  `# Driver code ` `if` `__name__ ``=``=` `'__main__'``: ` `    ``X ``=` `2` `    ``Y ``=` `2` `    ``M ``=` `3` `    ``N ``=` `3` ` `  `    ``# Function call ` `    ``print``(NumberOfWays(X, Y, M, N)) ` ` `  `# This code is contributed by ` `# Surendra_Gangwar `

## C#

 `// C# program to find the number of words  ` `// of X vowels and Y consonants can be  ` `// formed from M vowels and N consonants ` `using` `System; ` ` `  `class` `GFG ` `{ ` `     `  `    ``// Function to returns factorial of n ` `    ``static` `int` `fact(``int` `n)  ` `    ``{  ` `        ``int` `res = 1;  ` `        ``for` `(``int` `i = 2; i <= n; i++)  ` `            ``res = res * i;  ` `        ``return` `res;  ` `    ``}  ` `     `  `    ``// Function to find nCr  ` `    ``static` `int` `nCr(``int` `n, ``int` `r)  ` `    ``{  ` `        ``return` `fact(n) / (fact(r) *  ` `                          ``fact(n - r));  ` `    ``}  ` `     `  `    ``// Function to find the number of words  ` `    ``// of X vowels and Y consonants can be  ` `    ``// formed from M vowels and N consonants  ` `    ``static` `int` `NumberOfWays(``int` `X, ``int` `Y,  ` `                            ``int` `M, ``int` `N)  ` `    ``{  ` `        ``return` `fact(X + Y) * nCr(M, X) *  ` `                             ``nCr(N, Y);  ` `    ``}  ` `     `  `    ``// Driver code ` `    ``public` `static` `void` `Main (String[] args) ` `    ``{ ` `        ``int` `X = 2, Y = 2, M = 3, N = 3;  ` `     `  `        ``// Function call  ` `        ``Console.WriteLine(NumberOfWays(X, Y, M, N));          ` `    ``} ` `} ` ` `  `// This code is contributed by 29AjayKumar `

Output:

```216
```

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

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.