Мы последовательно исключаем варианты, при которых один брат не мог сделать вывод, исходя из слов другого. Лично я это делал, вычеркивая ряды и столбцы.
4 ряда и 7 столбцов. 6-й и 7-й столбец сразу исключаем, в них по одному ключу. Назвал столбец - узнал ключ. Первый столбец тоже исключаем, в нем нет английских ключей. Остается 4 столбца по 4 ключа.
Алеша знает ряд, но если так, то первый ряд тоже исключается, иначе он, зная, что отец не назвал Ивану 6 и 7 столбцы, сразу назвал бы ключ - пятый. Но он "не знает", то есть, это не первый ряд. Пятый столбец тоже исключается ("я не знаю и он не знает"), там остается один ключ - 19, ибо 5 уже исключен. Остаются ключи: 9, 11, 16, 17, 24, 25.
24 и 25 (как и ряд в целом) убираем, иначе Алеша, который знает ряд, не был бы уверен в незнании Ивана (ибо в этом же ряду есть ключ 28). Остаются 9,11, 16, 17.
Дальше:) 9 и 16 исключаем после фразы Ивана, ибо он, зная только столбец, не смог бы определить ключ. Остаются 11 и 17, но Алексей, который знает ряд, после слов Ивана (что исключает ключи 9,16), его находит - это 11 (единственный оставшийся английский ключ в ряду).
Проверим результат.
Алексей знает: ключ во 2-м ряду. Он говорит "не знаю", потому что ключей 2 (9 и 11) и добавляет "Иван тоже не знает", имея в виду, что во 2-м и 4-м столбце по 2 ключа.
Иван, зная, что ключ в 4-м столбце, понимает, что это либо 11, либо 25 ключ. Как только Алексей сказал "Иван тоже не знает", стало ясно, что 4-й ряд исключается, потому что в нем есть ключ 28 (единственный ключ в столбце, в этом случае Иван бы знал). У Ивана остается только 11-й ключ, и он говорит "я знаю".
После этих слов Алексей понял, что 2-й столбец, в котором 2 ключа (9 и 16), исключается, остается только 11-й ключ, и тоже сказал "я знаю".
С другими ключами (например, 17-м) такой расклад невозможен.