#include #include using namespace std; inline static int encode(char c){ switch(c){ case 'R': return 0; case 'S': return 1; case 'P': return 2; case 'X': return 3; default: return -1; } } int expecteddd[100]; const char s[] = "XRSP"; __attribute__((target("avx512f"))) uint32_t find_initial_state(){ const __m512i offsets = _mm512_setr_epi32(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); const __m512i mask3 = _mm512_set1_epi32(3); constexpr uint64_t LIMIT = uint64_t{1} << 32; for(uint64_t base = 0; base < LIMIT; base += 16){ __m512i state = _mm512_add_epi32(_mm512_set1_epi32(static_cast(base)), offsets); __mmask16 active = 0xFFFF; for(int j = 0; j < 100; ++j){ state = _mm512_xor_si512(state, _mm512_slli_epi32(state, 13)); state = _mm512_xor_si512(state, _mm512_srli_epi32(state, 17)); state = _mm512_xor_si512(state, _mm512_slli_epi32(state, 5)); __m512i r = _mm512_and_si512(state, mask3); __m512i e = _mm512_set1_epi32(expecteddd[j]); __mmask16 equal = _mm512_cmpeq_epi32_mask(r, e); active &= equal; if(active == 0){ break; } } if(active != 0){ unsigned lane = __builtin_ctz(static_cast(active)); return static_cast(base + lane); } } return 0; } int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); string T; cin >> T; for(int j = 0; j < 100; ++j){ expecteddd[j] = encode(T[j]); } uint32_t initial_state = find_initial_state(); int N; cin >> N; uint32_t state = initial_state; for(int i = 0; i < 100; i++){ state ^= state << 13; state ^= state >> 17; state ^= state << 5; } for(int i = 0; i < N; i++){ state ^= state << 13; state ^= state >> 17; state ^= state << 5; cout << s[state & 3]; } cout << '\n'; }