C. Целочисленное переполнение
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Виктор дописал решение для задачи и, не дождавшись мнений от команды, отправил его в систему.

Обновив страницу с посылкой, Виктор увидел неприятный вердикт Wrong Answer.

Неприятным он был по двум причинам:

  • во-первых, это были лишние $$$20$$$ минут штрафного времени;
  • во-вторых, Виктор совершенно не представлял, что он написал не так — и это бесило больше всего!

На это обратили внимание его сокомандники Айдар и Бегимай.

Они заметили, что у Виктора в решении используются две целочисленные переменные $$$A$$$ и $$$B$$$, после чего вычисляется результат их перемножения $$$C = A \cdot B$$$.

Причём все три переменные были объявлены как $$$32$$$-битные.

И Айдар, и Бегимай предположили, что в программе происходит целочисленное переполнение — ситуация, когда значение целого числа не умещается в указанный для него тип данных.

  • Айдар предположил, что, возможно, сами значения $$$A$$$ и/или $$$B$$$ не умещаются в $$$32$$$ бита.
  • Бегимай же считала, что сами $$$A$$$ и $$$B$$$ в порядке, но вот их произведение $$$C$$$ уже не умещается.
  • Виктор в ответ на оба предположения заметил, что лучше бы он написал решение на Python, где целые числа имеют неограниченный размер.

Переписать на Python ребята всегда успеют — сейчас они хотят понять, какие же типы данных необходимо использовать для $$$A$$$, $$$B$$$ и $$$C$$$.

Важная информация

  • В задаче предполагается лишь три целочисленных типа:
    • $$$32$$$-битный тип: $$$[-2^{31}; 2^{31} - 1] = [-2147483648; 2147483647]$$$;
    • $$$64$$$-битный тип: $$$[-2^{63}; 2^{63} - 1] = [-9223372036854775808; 9223372036854775807]$$$;
    • $$$128$$$-битный тип: $$$[-2^{127}; 2^{127} - 1]$$$.
  • Если перемножаются $$$X$$$-битное и $$$Y$$$-битное целые числа, то результат их произведения будет вычисляться как $$$Z$$$-битное число, где $$$Z = \max{(X, Y)}$$$.
Входные данные

В первой строке дано целое число $$$A$$$ $$$(1 \le A \le 10^{18})$$$ — значение переменной $$$A$$$.

Во второй строке дано целое число $$$B$$$ $$$(1 \le B \le 10^{18})$$$ — значение переменной $$$B$$$.

Выходные данные

В первой строке выведите целое число $$$T_A$$$ — необходимое количество битов для переменной $$$A$$$.

Во второй строке выведите целое число $$$T_B$$$ — необходимое количество битов для переменной $$$B$$$.

В третьей строке выведите целое число $$$T_C$$$ — необходимое количество битов для переменной $$$C$$$.

Все три числа $$$T_A, T_B, T_C$$$ могут принимать только значения $$$32$$$, $$$64$$$ или $$$128$$$:

  • Должно выполняться хотя бы одно из равенств $$$T_C = T_A$$$ либо $$$T_C = T_B$$$.
  • Если возможно несколько правильных ответов, то выведите ответ с минимальной суммой $$$T_A + T_B + T_C$$$.
Примеры
Входные данные
20000
100000
Выходные данные
32
32
32
Входные данные
1000000
300000
Выходные данные
64
32
64
Входные данные
3000000
3000000000000
Выходные данные
32
64
64
Входные данные
1000000000000000000
1000000000000000000
Выходные данные
128
64
128
Примечание

Минутка полезной информации

  • $$$32$$$-битный целочисленный тип в языках C++ и Java обозначается как int.
  • $$$64$$$-битный целочисленный тип в языке C++ обозначается как long long.
  • $$$64$$$-битный целочисленный тип в языке Java обозначается как long.
  • $$$128$$$-битные целочисленные типы в языках C++ и Java присутствуют в зависимости от компилятора, но их использование сопряжено с дополнительными трудностями.
  • Тип int в языке Python имеет неограниченное количество бит.

Первый тестовый пример

  • $$$A = 2 \cdot 10^4$$$;
  • $$$B = 10^5$$$;
  • $$$C = A \cdot B = 2 \cdot 10^9$$$.

Все три числа умещаются в $$$32$$$-битный тип данных.

Второй тестовый пример

  • $$$A = 10^6$$$;
  • $$$B = 3 \cdot 10^5$$$;
  • $$$C = A \cdot B = 3 \cdot 10^{11}$$$.

$$$A$$$ и $$$B$$$ умещаются в $$$32$$$-битный тип данных, но $$$C$$$ умещается только в $$$64$$$-битный.

Необходимо сделать $$$64$$$-битной либо переменную $$$A$$$, либо $$$B$$$.

Третий тестовый пример

  • $$$A = 3 \cdot 10^6$$$;
  • $$$B = 3 \cdot 10^{12}$$$;
  • $$$C = A \cdot B = 9 \cdot 10^{18}$$$.

$$$A$$$ умещается в $$$32$$$-битный тип данных, но $$$B$$$ и $$$C$$$ умещаются только в $$$64$$$-битный.

Так как $$$B$$$ уже $$$64$$$-битная, то $$$A$$$ можно оставить $$$32$$$-битной.

Четвёртый тестовый пример

  • $$$A = 10^{18}$$$;
  • $$$B = 10^{18}$$$;
  • $$$C = A \cdot B = 10^{36}$$$.

$$$A$$$ и $$$B$$$ умещаются в $$$64$$$-битный тип данных, но $$$C$$$ умещается только в $$$128$$$-битный.

Необходимо сделать $$$128$$$-битной либо переменную $$$A$$$, либо $$$B$$$.