
    Design an algorithm to determine the number of possible ways to create a personalized learning sequence where each module can be taught using one of the available teaching methods, with the constraint that no more than two consecutive modules can use the same teaching approach to maintain student engagement. The algorithm should consider n learning modules and k different teaching methods, ensuring optimal variety in the learning experience while respecting pedagogical continuity.
    

    
def count_no_of_ways(n, k):
    """
    Design an algorithm to determine the number of possible ways to create a personalized learning sequence where each module can be taught using one of the available teaching methods, with the constraint that no more than two consecutive modules can use the same teaching approach to maintain student engagement. The algorithm should consider n learning modules and k different teaching methods, ensuring optimal variety in the learning experience while respecting pedagogical continuity.
    

    """
def count_no_of_ways(n, k):
    """
    Design an algorithm to determine the number of possible ways to create a personalized learning sequence where each module can be taught using one of the available teaching methods, with the constraint that no more than two consecutive modules can use the same teaching approach to maintain student engagement. The algorithm should consider n learning modules and k different teaching methods, ensuring optimal variety in the learning experience while respecting pedagogical continuity.
    

    """
    dp = [0] * (n + 1)
    total = k
    mod = 1000000007
    dp[1] = k
    dp[2] = k * k
    for i in range(3, n + 1):
        dp[i] = (k - 1) * (dp[i - 1] + dp[i - 2]) % mod
    return dp[n]