Эквивалентные строки

Давайте введём новое определение эквивалентности строк (~). Две строки a и b считаются эквивалентными, если они имеют одинаковую длину и выполняется одно из двух условий:

  1. a идентична b (a == b).

  2. Если мы разбиваем a на две подстроки одинакового размера a1 и a2, а b — на две подстроки b1 и b2 такого же размера, то справедливо одно из следующих утверждений:

    1. a1 эквивалентна b1, и a2 эквивалентна b2 (a1 ~ b1 и a2 ~ b2),

    2. a1 эквивалентна b2, и a2 эквивалентна b1 (a1 ~ b2 и a2 ~ b1).

Задача: по заданным строкам a и b определить, являются ли они эквивалентными.

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

Первая строка входа содержит строку a (1 ≤ |a| ≤ ).

Вторая строка входа содержит строку b (1 ≤ |b| ≤ ).

Обе длины |a| и |b| являются степенями двойки.

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

Программа должна вывести Yes, если a эквивалентна b, и No в противном случае.

Примеры

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

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

bbcb
bcbb

Yes

bbaa
baba

No

Пояснение

  1. bbcbbb + cb, bcbbbc + bbbb эквивалентна bb, а cb эквивалентна bc, поскольку, разбивая cbc + b и bcb + c, мы видим, что они эквивалентны.

  2. bbaabb + aa, bababa + ba ⇒ ни одна пара не оказываются эквивалентными, потому что при дальнейшем разбиении нам придётся сравнивать aa с одной из ba, и поскольку в aa нет символов b, данные строки не могут быть эквивалентны.

Constraints

Time limit: 2 seconds

Memory limit: 512 MB

Output limit: 1 MB

To check your solution you need to sign in
Sign in to continue