# 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 = 3Output :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 = 216Input :X = 1, Y = 2, M = 2, N = 3Output :36

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the

Essential Maths for CP Courseat a student-friendly price. To complete your preparation from learning a language to DS Algo and many more, please referComplete Interview Preparation Course.

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 <bits/stdc++.h>` `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` |

## Javascript

`<script>` ` ` `// JavaScript 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` ` ` `function` `fact(n) {` ` ` `var` `res = 1;` ` ` `for` `(` `var` `i = 2; i <= n; i++)` ` ` `res = res * i;` ` ` `return` `res;` ` ` `}` ` ` `// Function to find nCr` ` ` `function` `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` ` ` `function` `NumberOfWays(X, Y, M, N) {` ` ` `return` `fact(X + Y) * nCr(M, X) * nCr(N, Y);` ` ` `}` ` ` `// Driver code` ` ` `var` `X = 2,` ` ` `Y = 2,` ` ` `M = 3,` ` ` `N = 3;` ` ` ` ` `// Function call` ` ` `document.write(NumberOfWays(X, Y, M, N));` ` ` ` ` `// This code is contributed by rdtank.` ` ` `</script>` |

**Output:**

216