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

Задача . B. Универсальное решение


Недавно, вы обнаружили бота, с которым можно сыграть в «Камень, ножницы, бумага». К сожалению, бот использует довольно примитивный алгоритм игры: у него есть строка \(s = s_1 s_2 \dots s_{n}\) длины \(n\), где каждый символ — это R, S или P.

Во время инициализации, бот выбирает стартовую позицию \(pos\) (\(1 \le pos \le n\)), и потом может сыграть любое количество раундов. В первом раунде, он выбирает «Камень», «Ножницы» или «Бумагу» на основании значения \(s_{pos}\):

  • если \(s_{pos}\) равняется R, то бот выбирает «Камень»;
  • если \(s_{pos}\) равняется S, то бот выбирает «Ножницы»;
  • если \(s_{pos}\) равняется P, то бот выбирает «Бумагу»;

Во втором раунде, выбор бота основан на значении \(s_{pos + 1}\). В третьем раунде — на \(s_{pos + 2}\) и так далее. После \(s_n\), бот возвращается к \(s_1\) и продолжает игру.

Вы планируете сыграть \(n\) раундов и уже определили строку \(s\), однако не знаете, чему равняется стартовая позиция \(pos\). Но так как тактика бота очень скучная, вы решили найти такие \(n\) ходов в раундах, чтобы максимизировать среднее количество побед.

Другими словами, предположим, что ваши ходы — это \(c_1 c_2 \dots c_n\) и если бот начнет с позиции \(pos\), то вы выиграете в \(win(pos)\) раундах. Найдите \(c_1 c_2 \dots c_n\) такие, что \(\frac{win(1) + win(2) + \dots + win(n)}{n}\) — максимально возможное.

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

В первой строке задано единственное число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В следующих \(t\) строках заданы сами наборы — по одному в строке. В единственной строке каждого набора задана строка \(s = s_1 s_2 \dots s_{n}\) (\(1 \le n \le 2 \cdot 10^5\); \(s_i \in \{\text{R}, \text{S}, \text{P}\}\)) — строка бота.

Гарантируется, что суммарная длина всех строк в одном тесте не превосходит \(2 \cdot 10^5\).

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

Для каждого набора входных данных, выведите \(n\) ходов \(c_1 c_2 \dots c_n\) таких, которые максимизируют среднее количество побед. Выведите их в том же формате, в котором задана строка \(s\).

Если существует несколько оптимальных ответов, выведите любой из них.

Примечание

В первом наборе входных данных, бот (с какой бы позиции не начал) будет всегда выбирать «Камень», поэтому мы можем всегда выбирать «Бумагу». То есть, в любом случае, мы выиграем все \(n = 4\) раунда, и, соответственно, среднее количество побед также равно \(4\).

Во втором наборе:

  • если бот начнет с позиции \(pos = 1\), то \((s_1, c_1)\) — ничья, \((s_2, c_2)\) — ничья и \((s_3, c_3)\) — ничья, поэтому \(win(1) = 0\);
  • если бот начнет с позиции \(pos = 2\), то \((s_2, c_1)\) — победа, \((s_3, c_2)\) — победа и \((s_1, c_3)\) — победа, поэтому \(win(2) = 3\);
  • если бот начнет с позиции \(pos = 3\), то \((s_3, c_1)\) — проигрыш, \((s_1, c_2)\) — проигрыш и \((s_2, c_3)\) — проигрыш, поэтому \(win(3) = 0\);
Среднее равно \(\frac{0 + 3 + 0}{3} = 1\), и можно доказать, что это максимально возможное среднее количество побед.

Картинка из Википедии, описывающая игру «Камень, ножницы, бумага»:


Примеры
Входные данныеВыходные данные
1 3
RRRR
RSP
S
PPPP
RSP
R

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

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