
    Design an algorithm to determine the number of possible signal timing pattern combinations for n consecutive traffic signals along a road corridor, where each signal can use k different timing patterns, with the constraint that no more than 2 consecutive signals can use the same timing pattern to maintain traffic flow diversity. The timing patterns must be optimized to prevent traffic congestion while ensuring smooth flow across the corridor.
    

    
def count_no_of_ways(n, k):
    """
    Design an algorithm to determine the number of possible signal timing pattern combinations for n consecutive traffic signals along a road corridor, where each signal can use k different timing patterns, with the constraint that no more than 2 consecutive signals can use the same timing pattern to maintain traffic flow diversity. The timing patterns must be optimized to prevent traffic congestion while ensuring smooth flow across the corridor.
    

    """
def count_no_of_ways(n, k):
    """
    Design an algorithm to determine the number of possible signal timing pattern combinations for n consecutive traffic signals along a road corridor, where each signal can use k different timing patterns, with the constraint that no more than 2 consecutive signals can use the same timing pattern to maintain traffic flow diversity. The timing patterns must be optimized to prevent traffic congestion while ensuring smooth flow across the corridor.
    

    """
    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]