
#include <cstdio>

#include <vector>

#include <algorithm>

using namespace std; const int maxn = 3e5 + 5;

int n, p[maxn];

struct node { int l, r, fr, op; }; vector<node> dp[maxn];

void solve()
{
	scanf("%d", &n);
	for (int i = 1; i <= n; i++) scanf("%d", p + i);
	dp[0].push_back({ 1, 0, 0, 0 });
	for (int i = 1; i <= n; i++)
	{
		sort(dp[i - 1].begin(), dp[i - 1].end(), [](node x, node y) { return x.l == y.l ? x.r > y.r : x.l > y.l; });
		int mx = -1e9;
		for (int j = 0; j < dp[i - 1].size(); j++)
		{
			node u = dp[i - 1][j];
			if (u.r <= mx) continue;
			if (u.l >= i - p[i] && u.l != i) dp[i].push_back({ u.r < i ? i : n + 1, u.r, j, 0 });
			dp[i].push_back({ min(u.l, u.r < i ? i : n + 1), max(u.r, i + p[i]), j, 1 });
			mx = max(mx, u.r);
		}
	}
	for (int i = 1; i <= n; i++) for (node x : dp[i]) if (x.l == n + 1 && x.r >= n)
	{
		puts("YES");
		vector<char> out;
		for (int j = i; j; j--)
		{
			out.push_back(x.op ? 'R' : 'L'); x = dp[j - 1][x.fr];
		}
		for (int i = out.size() - 1; i >= 0; i--) putchar(out[i]);
		for (int j = i + 1; j <= n; j++) putchar('L'); puts("");
		for (int i = 0; i <= n; i++) dp[i].clear(); return;
	}
	puts("NO");
	for (int i = 0; i <= n; i++) dp[i].clear(); return;
}

int main() { int T; scanf("%d", &T); while (T--) solve(); }