#nullable enable #region var (_input, _iter) = (Array.Empty(), 0); T I() where T : IParsable { while (_iter >= _input.Length) (_input, _iter) = (Console.ReadLine()!.Trim().Split(' '), 0); return T.Parse(_input[_iter++], null); } #endregion var ciz = "RSPX".ToList(); var shifts = new[]{ 13, -17, 5 }; var t = new uint[100]; { var str = I(); for (var i = 0; i < 100; i++) t[i] = (uint)ciz.FindIndex(e => e == str[i]); } var n = I(); var s = new uint[32]; var l = new uint[200]; var r = new uint[200]; for (var i = 0; i < 32; i++) s[i] = 1U << i; for (var ti = 0; ti < 100; ti++) { foreach (var shift in shifts) { var ns = s.AsSpan().ToArray(); for (var i = 0; i < 32; i++) { var j = i + shift; if (0 <= j && j < 32) ns[j] ^= s[i]; } s = ns; } var h = t[ti]; l[ti * 2] = s[0]; r[ti * 2] = h & 1; l[ti * 2 + 1] = s[1]; r[ti * 2 + 1] = (h >> 1) & 1; } var used = new bool[200]; for (var i = 0; i < 32; i++) { var f = -1; for (var j = 0; j < 200; j++) { var v = l[j]; if (used[j] || (v & (1U << i)) == 0) continue; f = j; used[f] = true; break; } for (var j = 0; j < 200; j++) if (j != f) { var v = l[j]; if ((v & (1U << i)) == 0) continue; l[j] ^= l[f]; r[j] ^= r[f]; } } var state = 0U; for (var i = 0; i < 200; i++) { if (r[i] == 0) continue; var f = -1; for (var j = 0; j < 32; j++) { if ((l[i] & (1U << j)) == 0) continue; if (f >= 0) throw new Exception(); f = j; } if (f < 0) throw new Exception(); state ^= 1U << f; } var ans = new char[n]; for (var i = 0; i < n; i++) { state ^= state << 13; state ^= state >> 17; state ^= state << 5; var j = (state + 3) & 3; ans[i] = ciz[(int)j]; } Console.WriteLine(new string(ans));