Олимпиадный тренинг

Задача . E. Ромские цифры


Ваш друг прислал вам строку \(S\), состоящую из \(n\) строчных английских букв. Оказывается, это число, записанное в ромской системе счисления. Знания о ромских числах давно утрачены, но сохранился алгоритм перевода ромских чисел в привычные нам. Пронумеруем символы \(S\) от \(1\) до \(n\) слева направо. Значение числа \(S\) обозначим как \(f(S)\), оно определяется следующим образом:

  • Если \(|S| > 1\), то выбирается произвольное значение \(m\) (\(1 \le m < |S|\)) и считается, что \(f(S) = -f(S[1, m]) + f(S[m + 1, |S|])\), где \(S[l, r]\) — это подстрока \(S\) с \(l\)-й позиции до \(r\)-й включительно.
  • Иначе \(S = c\), где \(c\) — какая-то буква. В таком случае \(f(S) = 2^{pos(c)}\), где \(pos(c)\) — это позиция буквы \(c\) в английском алфавите (\(pos(\)a\() = 0\), \(pos(\)z\() = 25\)).

Обратите внимание, что \(m\) выбирается независимо на каждом шаге.

Друг уверен, что правильно выбирая \(m\) на каждом шаге, можно получить \(f(S) = T\). Прав ли он?

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

В первой строке даны числа \(n\) и \(T\) (\(2 \leq n \leq 10^5\), \(-10^{15} \leq T \leq 10^{15}\)).

Во второй строке дана строка \(S\) длины \(n\), состоящая из строчных английских букв.

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

Выведите «Yes», если можно получить требуемое значение, иначе выведите «No».

Вы можете выводить каждую букву в любом регистре (строчную или заглавную).

Примечание

Во втором примере нельзя получить \(-7\). Но можно получить, например, \(1\) следующим образом:

  1. Сперва выбираем \(m = 1\), тогда \(f(\)abc\() = -f(\)a\() + f(\)bc\()\)
  2. \(f(\)a\() = 2^0 = 1\)
  3. \(f(\)bc\() = -f(\)b\() + f(\)c\() = -2^1 + 2^2 = 2\)
  4. Итого \(f(\)abc\() = -1 + 2 = 1\)

Примеры
Входные данныеВыходные данные
1 2 -1
ba
Yes
2 3 -7
abc
No
3 7 -475391
qohshra
Yes

time 1000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w643
Комментарий учителя