Рещить задание по питону
Условие
Аня и Валя поступили в Магическую Школу Преобразований. Первым предметом у них в расписании была алхимия. На первом занятии они изучали N различных веществ, каждое из которых можно превратить в другое, и наоборот. За каждое доказательство у доски того факта, что одно вещество можно превратить в другое, студент получал конфетку. Но чтобы все выступления у доски были содержательными, преподаватель поставил условие~- нельзя доказывать очевидные факты, которые являются логическими следствиями уже доказанных. То есть, если уже доказано, что из вещества А1 получается А2, из А2 получается А3, …, из Ак1 получается Ак, то нельзя доказывать, что из А1 получается А1 Студенты в группе, где учатся Аня и Валя, очень дружные, и поэтому они решили распределить доказательстватак, чтобы получить как можно больше конфеток. Выясните, какое максимальное количество конфеток могут получить студенты, и как они должны действовать для этого.
Формат входных данных
Во входном файле содержится единственное число N (2 _ N 100) -- количество различных веществ, которые можно превращать друг в друга.
Формат выходных данных
В первой строке выходного файла выведите число т~- максимальное число конфеток, могут получить студенты. В каждой из следующих т строк выведите по два числа А и В, означающих, что очередной студент будет доказывать что из вещества А можно получить вещество В. Все вещества пронумерованы целыми числами от 1 до N.
https://otvet.mail.ru/question/242875975 вот тут есть
def solve():
n = int(input())
# The maximum number of candies is obtained by proving a simple cycle
# through all the substances. This is because a cycle of length N is the
# minimal set of edges whose transitive closure covers all pairs of nodes,
# and no edge in the cycle is a transitive consequence of other edges in
# the cycle. Once the cycle is proven, any other transformation A -> B
# can be shown as a consequence of the cycle edges, making that proof
# invalid according to the condition.
# The maximum number of proofs is N.
m = n
print(m)
# The proofs are the edges of a cycle: 1->2, 2->3, ..., N-1 -> N, N -> 1.
for i in range(1, n):
print(i, i + 1)
print(n, 1)
solve()
n = int(input())
if n == 2:
print(2)
print(1, 2)
print(2, 1)
else:
m = n * (n - 1) // 2 + n - 2
print(m)
for i in range(1, n):
for j in range(i + 1, n + 1):
print(i, j)
for i in range(n, 2, -1):
print(i, i - 2)