/* https://codeforces.com/blog/entry/87282?#comment-755207 (BledDest) */
#include <stdio.h>
#include <string.h>

#define N	300000
#define INF	0x3f3f3f3f

int min(int a, int b) { return a < b ? a : b; }
int max(int a, int b) { return a > b ? a : b; }

int n;

int ft[N + 1];

void update(int i, int x) {
	while (i <= n) {
		ft[i] = min(ft[i], x);
		i |= i + 1;
	}
}

int query(int i) {
	int x = INF;

	while (i >= 0) {
		x = min(x, ft[i]);
		i &= i + 1, i--;
	}
	return x;
}

int st[N * 2];

void build(int *aa) {
	int i;

	for (i = 0; i < n; i++)
		st[n + i] = i + aa[i];
	for (i = n - 1; i > 0; i--)
		st[i] = max(st[i << 1 | 0], st[i << 1 | 1]);
}

int query_(int l, int r) {
	int x = -1;

	for (l += n, r += n; l <= r; l >>= 1, r >>= 1) {
		if ((l & 1) == 1)
			x = max(x, st[l++]);
		if ((r & 1) == 0)
			x = max(x, st[r--]);
	}
	return x;
}

int main() {
	int t;

	scanf("%d", &t);
	while (t--) {
		static int aa[N], dp[N], pp[N];
		static char cc[N + 1];
		int i;

		scanf("%d", &n);
		for (i = 0; i < n; i++)
			scanf("%d", &aa[i]);
		build(aa);
		memset(ft, 0x3f, (n + 1) * sizeof *ft);
		update(n - 0, -1);
		for (i = 0; i < n; i++) {
			int x;

			pp[i] = query(n - max(i - aa[i], 0));
			if (pp[i] == INF)
				dp[i] = -1, pp[i] = -3;
			else
				dp[i] = pp[i] < i - 1 ? query_(pp[i] + 1, i - 1) + 1 : i;
			if (i > 0 && dp[i - 1] > i && dp[i] < (x = max(dp[i - 1], i + aa[i] + 1)))
				dp[i] = x, pp[i] = -2;
			dp[i] = min(dp[i], n);
			if (dp[i] != -1)
				update(n - dp[i], i);
		}
		if (dp[n - 1] < n) {
			printf("NO\n");
			continue;
		}
		printf("YES\n");
		cc[n] = 0;
		i = n - 1;
		while (i >= 0)
			if (pp[i] == -2)
				cc[i--] = 'R';
			else {
				int p;

				cc[i] = 'L';
				p = pp[i];
				while (--i > p)
					cc[i] = 'R';
			}
		printf("%s\n", cc);
	}
	return 0;
}
