3
private int mod = (int) 1e9 + 7;5
public int countVowelPermutation(int n) {6
dp = new long[6][n + 1];9
for (int i = 0; i < 5; i++) dp[i][0] = 1;12
return (int) dp[5][n];15
private long helper(int n, char vowel) {19
if (vowel == 'z') // we are using z for our convenience just to add Permutations of all Vowels31
// from here as per our assumptions of Vowels we will make calls & store results32
else if (vowel == 'a') // for Nth number we would store Result for "a" in dp[0][n]34
if (dp[0][n] != 0) return dp[0][n];35
ans = (ans + helper(n - 1, 'e')) % mod;37
} else if (vowel == 'e') // for Nth number we would store Result for "e" in dp[1][n]39
if (dp[1][n] != 0) return dp[1][n];40
ans = (ans + helper(n - 1, 'a') + helper(n - 1, 'i')) % mod;42
} else if (vowel == 'i') // for Nth number we would store Result for "i" in dp[2][n]44
if (dp[2][n] != 0) return dp[2][n];46
(ans + helper(n - 1, 'a') + helper(n - 1, 'e') + helper(n - 1, 'o') + helper(n - 1, 'u'))49
} else if (vowel == 'o') // for Nth number we would store Result for "o" in dp[3][n]51
if (dp[3][n] != 0) return dp[3][n];52
ans = (ans + helper(n - 1, 'i') + helper(n - 1, 'u')) % mod;54
} else // for Nth number we would store Result for "u" in dp[4][n]56
if (dp[4][n] != 0) return dp[4][n];57
ans = (ans + helper(n - 1, 'a')) % mod;