
    Given n distinct student risk indicators (including attendance, grades, and engagement metrics), determine the total number of possible ways these indicators can be grouped into different risk profiles for dropout prediction, where each indicator must be assigned to exactly one profile and empty profiles are allowed. The number of risk profiles is not fixed, and can range from 1 (all indicators in one profile) to n (each indicator in its own profile).
    

    
def bell_number(n):
    """
    Given n distinct student risk indicators (including attendance, grades, and engagement metrics), determine the total number of possible ways these indicators can be grouped into different risk profiles for dropout prediction, where each indicator must be assigned to exactly one profile and empty profiles are allowed. The number of risk profiles is not fixed, and can range from 1 (all indicators in one profile) to n (each indicator in its own profile).
    

    """
def bell_number(n):
    """
    Given n distinct student risk indicators (including attendance, grades, and engagement metrics), determine the total number of possible ways these indicators can be grouped into different risk profiles for dropout prediction, where each indicator must be assigned to exactly one profile and empty profiles are allowed. The number of risk profiles is not fixed, and can range from 1 (all indicators in one profile) to n (each indicator in its own profile).
    

    """
    bell = [[0 for i in range(n + 1)] for j in range(n + 1)]
    bell[0][0] = 1
    for i in range(1, n + 1):
        bell[i][0] = bell[i - 1][i - 1]
        for j in range(1, i + 1):
            bell[i][j] = bell[i - 1][j - 1] + bell[i][j - 1]
    return bell[n][0]