
    Design an algorithm for an automated grading system that determines the number of ways to arrange n assessment questions across k different difficulty levels, ensuring no more than 2 consecutive questions share the same difficulty level. This constraint helps maintain student engagement by preventing long stretches of similarly challenging questions while allowing occasional pairs of questions at the same difficulty level for concept reinforcement.
    

    
def count_no_of_ways(n, k):
    """
    Design an algorithm for an automated grading system that determines the number of ways to arrange n assessment questions across k different difficulty levels, ensuring no more than 2 consecutive questions share the same difficulty level. This constraint helps maintain student engagement by preventing long stretches of similarly challenging questions while allowing occasional pairs of questions at the same difficulty level for concept reinforcement.
    

    """
def count_no_of_ways(n, k):
    """
    Design an algorithm for an automated grading system that determines the number of ways to arrange n assessment questions across k different difficulty levels, ensuring no more than 2 consecutive questions share the same difficulty level. This constraint helps maintain student engagement by preventing long stretches of similarly challenging questions while allowing occasional pairs of questions at the same difficulty level for concept reinforcement.
    

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