#include using namespace std; using ll = long long; static const ll INF = (ll)4e18; int N; ll K; int L[400005], R[400005]; ll dp[400005][3]; char C[3] = {'R','P','S'}; inline int win(int a,int b){ if(a==b) return a; if(a==0 && b==2) return 0; if(a==2 && b==1) return 2; return 1; } void dfs(int v){ if(L[v]==-1){ for(int i=0;i<3;i++) dp[v][i]=1; return; } dfs(L[v]); dfs(R[v]); for(int i=0;i<3;i++) dp[v][i]=0; for(int i=0;i<3;i++){ for(int j=0;j<3;j++){ int t = win(i,j); __int128 add = (__int128)dp[L[v]][i] * dp[R[v]][j]; if(add > INF) add = INF; dp[v][t] = min(INF, dp[v][t] + (ll)add); } } } string build(int v, ll &k, int target){ if(L[v]==-1){ for(int i=0;i<3;i++){ if(i==target){ if(k==1) return string(1,C[i]); k--; } } return "-1"; } for(int i=0;i<3;i++){ for(int j=0;j<3;j++){ int t = win(i,j); if(t != target) continue; ll ways = min(INF, dp[L[v]][i] * dp[R[v]][j]); if(k > ways){ k -= ways; }else{ string a = build(L[v], k, i); if(a=="-1") return "-1"; string b = build(R[v], k, j); if(b=="-1") return "-1"; return string(1,C[target]) + a + b; } } } return "-1"; } int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int T; cin >> T; while(T--){ cin >> N >> K; vector A(N-1); for(int i=0;i> A[i]; for(int i=0;i<400005;i++){ L[i]=R[i]=-1; for(int j=0;j<3;j++) dp[i][j]=0; } vector cur(N); iota(cur.begin(), cur.end(), 0); int ptr = N; for(int i=0;i0) cout << "-1\n"; else cout << res << "\n"; } } }