------
## 最终结论
```python
def countVowelStrings(n: int) -> int:
    MOD = 10**9 + 7

    # Initialize the dp array
    dp = [[0] * 5 for _ in range(n + 1)]
    
    # Base case: when n = 1, each vowel can be a string of length 1
    for j in range(5):
        dp[1][j] = 1

    # State transition based on the rules provided
    for i in range(2, n + 1):
        dp[i][0] = dp[i-1][1]  # 'a' can only follow 'e'
        dp[i][1] = (dp[i-1][0] + dp[i-1][2]) % MOD  # 'e' can follow 'a' or 'i'
        dp[i][2] = (dp[i-1][0] + dp[i-1][1] + dp[i-1][3] + dp[i-1][4]) % MOD  # 'i' can follow 'a', 'e', 'o', 'u'
        dp[i][3] = (dp[i-1][2] + dp[i-1][4]) % MOD  # 'o' can follow 'i' or 'u'
        dp[i][4] = dp[i-1][0]  # 'u' can only follow 'a'

    # Calculate total number of strings of length n
    total_count = sum(dp[n]) % MOD
    return total_count
```