#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("avx2"))) uint32_t find_initial_state(){ const __m256i offsets = _mm256_setr_epi32(0, 1, 2, 3, 4, 5, 6, 7); const __m256i mask3 = _mm256_set1_epi32(3); constexpr uint64_t LIMIT = uint64_t{1} << 32; for(uint64_t base = 0; base < LIMIT; base += 8){ __m256i state = _mm256_add_epi32(_mm256_set1_epi32(static_cast(base)), offsets); unsigned active = 0xFF; for(int j = 0; j < 100; ++j){ state = _mm256_xor_si256(state, _mm256_slli_epi32(state, 13)); state = _mm256_xor_si256(state, _mm256_srli_epi32(state, 17)); state = _mm256_xor_si256(state, _mm256_slli_epi32(state, 5)); __m256i r = _mm256_and_si256(state, mask3); __m256i e = _mm256_set1_epi32(expecteddd[j]); __m256i equal = _mm256_cmpeq_epi32(r, e); unsigned equal_mask = static_cast(_mm256_movemask_ps(_mm256_castsi256_ps(equal))); active &= equal_mask; if(active == 0){ break; } } if(active != 0){ unsigned lane = __builtin_ctz(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'; }