# Define the items as a list of tuples (weight, value)
items = [(2, 6), (3, 5), (4, 8), (5, 9)]
# Define the capacity of the knapsack
capacity = 10
# Initialize the table with zeros
table = [[0 for j in range(capacity + 1)] for i in range(len(items) + 1)]
# Fill in the table using dynamic programming
for i in range(1, len(items) + 1):
    for j in range(1, capacity + 1):
        weight, value = items[i-1]
        if weight <= j:
            table[i][j] = max(table[i-1][j], table[i-1][j-weight] + value)
        else:
            table[i][j] = table[i-1][j]
# Find the items that were included in the solution
i = len(items)
j = capacity
included_items = []
while i > 0 and j > 0:
    weight, value = items[i-1]
    if table[i][j] != table[i-1][j]:
        included_items.append(i-1)
        j -= weight
    i -= 1
# Reverse the list of included items
included_items = included_items[::-1]
# Print the table and the solution
print("Table:")
for row in table:
    print(row)
print("Maximum value:", table[-1][-1])
print("Included items:", included_items)