Нечасто случается найти на дороге функцию, особенно с использованием побитовых операций, но Вадиму удалось это сделать. На этот раз ему попалась следующая функция:
| Python |
C++ |
def f(x, y):
if y == 0:
return x
return f(x ^ y, (x & y) << 1)
|
int f(int x, int y) {
if (y == 0)
return x;
return f(x ^ y, (x & y) << 1);
}
|
Поскольку эта функция от двух аргументов, Вадим взял найденные ранее на дороге два числа X и Y и решил вызвать f(X,Y) ровно один раз. Но у него нет под рукой никакой электроники, которая могла бы выполнить этот код, так что он просит помощи у вас. Результат выполнения Вадима не интересует, ему нужно знать, закончит ли когда-либо работу эта функция, и если да, то сколько запусков этой функции произойдёт перед этим. Ответьте на этот вопрос.
Исходные данные
В первой строке вводится целое число X в двоичной системе счисления (1 ≤ X < 21 000 000).
Во второй строке вводится целое число Y в двоичной системе счисления (1 ≤ Y < 21 000 000).
Результат
Выведите «infinity», если с данными аргументами функция будет работать бесконечно, в противном случае выведите количество запусков функции f при единственном вызове f(X,Y).
Примеры
| исходные данные | результат |
|---|
1011
100
| 2
|
101
1
| 3
|
Замечания
В коде функции на C++ под int подразумевается любое целое число.
Автор задачи: Вадим Баринов
Источник задачи: Чемпионат Урала 2025