Problem: There are n lanterns in a row. The lantern i is placed in position i and has power equal to p_i.

Each lantern can be directed to illuminate either some lanterns to the left or some lanterns to the right. If the i-th lantern is turned to the left, it illuminates all such lanterns j that j ∈ [i - p_i, i - 1]. Similarly, if it is turned to the right, it illuminates all such lanterns j that j ∈ [i + 1, i + p_i].

Your goal is to choose a direction for each lantern so each lantern is illuminated by at least one other lantern, or report that it is impossible.

Input

The first line contains one integer t (1 ≤ t ≤ 10000) — the number of test cases.

Each test case consists of two lines. The first line contains one integer n (2 ≤ n ≤ 3 ⋅ 10^5) — the number of lanterns.

The second line contains n integers p_1, p_2, ..., p_n (0 ≤ p_i ≤ n) — the power of the i-th lantern.

The sum of n over all test cases does not exceed 3 ⋅ 10^5.

Output

For each test case, print the answer as follows:

If it is possible to direct all lanterns so that each lantern is illuminated, print YES in the first line and a string of n characters L and/or R (the i-th character is L if the i-th lantern is turned to the left, otherwise this character is R) in the second line. If there are multiple answers, you may print any of them.

If there is no answer, simply print NO for that test case.

Example

Input


4
8
0 0 3 1 1 1 1 2
2
1 1
2
2 2
2
0 1


Output


YES
RRLLLLRL
YES
RL
YES
RL
NO

Solution (in CPP):

Solution:
/*
少加头文件，爆零两行泪
DP后效性，爆零两行泪
文件读入错，爆零两行泪
文件名写错，爆零两行泪
调完不编译，爆零两行泪
结论不证明，爆零两行泪
数组没开够，爆零两行泪
ll开 int，爆零两行泪
 dp 没初值，爆零两行泪
深搜没边界，爆零两行泪
广搜忘出队，爆零两行泪
模数没看清，爆零两行泪
越界不特判，爆零两行泪
多测不清空，爆零两行泪
空间胡乱开，爆零两行泪
无向变有向，爆零两行泪
调试忘删除，爆零两行泪
文件不保存，爆零两行泪
题目提交错，爆零两行泪
*/
#pragma GCC optimize("Ofast")
#include<bits/stdc++.h>
#define ll long long
#define gmax(x,y) x=max(x,y)
#define gmin(x,y) x=min(x,y)
#define F first
#define S second
#define P pair
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define rep(i,a,b) for(int i=a;i<b;i++)
#define V vector
#define RE return
#define ALL(a) a.begin(),a.end()
#define MP make_pair
#define PB emplace_back
#define PF emplace_front
#define FILL(a,b) memset(a,b,sizeof(a))
#define lwb lower_bound
#define upb upper_bound
using namespace std;
int n;
int p[300005],dp[300005],log_2[300005],lst[300005];P<int,int> maxi[300005][20];
bool f[300005];
P<int,int> get(int l,int r){
	if(l>r)RE MP(-1e9,-1e9);
	int len=r-l+1;
	RE max(maxi[l][log_2[len]],maxi[r-(1<<log_2[len])+1][log_2[len]]);
}
void solve(){
	cin>>n;
	FOR(i,1,n)cin>>p[i],maxi[i][0]=MP(i+p[i],i),f[i]=0;
	FOR(i,1,19){
		FOR(j,1,n)if(j+(1<<i)-1<=n){
			maxi[j][i]=max(maxi[j][i-1],maxi[j+(1<<(i-1))][i-1]);
		}
	}
	FOR(i,2,n){
		if(dp[i-1]>=i){
			dp[i]=max(dp[i-1],i+p[i]);
			f[i]=1;lst[i]=i-1;
		}else dp[i]=dp[i-1];
		int it=lwb(dp,dp+i,i-p[i]-1)-dp;
		if(it<i){
			P<int,int> now=get(it+1,i-1);
			if(max(i-1,now.F)>dp[i]){
				dp[i]=max(i-1,now.F);
				lst[i]=it;
			}
		}
	}
	if(dp[n]<n){
		cout<<"NO\n";
	}else {
		cout<<"YES\n";
		int now=n;
		while(now>=1){
			int to=lst[now];
			if(to<now-1){
			FOR(i,to+1,now-1){
				f[i]=1;
			}
			f[now]=0;
			} 
			now=to;
		}
		FOR(i,1,n){
			if(f[i]){
				cout<<'R';
			}else cout<<'L';
		}
		cout<<'\n';
	}
}
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	FOR(i,2,300000)log_2[i]=log_2[i/2]+1;
	int t;
	cin>>t;
	while(t--)solve();
	RE 0;
}