#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<LL,LL> pll;
typedef pair<int,int> pii;
#define fi first
#define se second
//#define out(x) cout<<#x<<"="<<x<<endl
#define out(x) 
#define DEBUG(x) cout<<#x<<" = "<<x<<endl
#define rep(i,b) for(int i=(0);i<(int)(b);++i)
#define REP(i,a,b) for(int i=(a);i<(int)(b);++i)
#define FOR(i,a,b) for(int i=(a);i<=(int)(b);++i)
#define FORD(i,a,b) for(int i=(a);i>=(int)(b);--i)
#define CLR(x,y) memset(x,y,sizeof(x))
int pp[1<<14];
int pre[(1<<13)+10][(1<<13)+10];
short vis[(1<<13)+10][(1<<13)+10];
int pack(int m1,int m2,int o){
  return (m1<<14)+m2+(o<<30);
}
tuple<int,int> unpack(int x){  
  return make_tuple((x>>14)&((1<<14)-1),x&((1<<13)-1));
}
void prt(int m1,int m2,int k,int x=-1){
  return;
  printf("[");
  rep(i,13)if(m1>>i&1)printf("%d ",1<<i);
  printf("]  ");
  printf("[");
  FORD(i,12,0)if(m2>>i&1)printf("%d ",1<<i);
  printf("]");
  printf(" -> %d ",k);  
  if(~x){
    int p1,p2;
    tie(p1,p2)=unpack(x);
    printf("pre ");
    printf("[");
    rep(i,13)if(p1>>i&1)printf("%d ",1<<i);
    printf("]  ");
    printf("[");
    FORD(i,12,0)if(p2>>i&1)printf("%d ",1<<i);
    printf("]");
    printf(" %d",x>>30&1);
  }
  puts("");
}
void cmb(int &m1,int &m2){
  if(!m1 || !m2)return;
  int s=m1+m2;
  int t1=31-__builtin_clz(m1),t2=31-__builtin_clz(m2);
  if(t1==t2){
    m1+=1<<t2,m2-=1<<t2;
  }
  assert(s==m1+m2);
}
int main(){  
  CLR(pp,-1);
  rep(i,14)pp[1<<i]=i;
  int T;scanf("%d",&T);
  FOR(cs,1,T){  
    int n;scanf("%d",&n);
    static int a[1005];
    unordered_map<int,int> pos;
    int sm=0;
    rep(i,n)pos[sm]=i,scanf("%d",a+i),sm+=a[i];
    pos[sm]=n;
    queue<pii> q;
    q.push(pii(0,0));vis[0][0]=cs;
    int r1=-1,r2=-1;
    while(!q.empty()){
      auto now=q.front();q.pop();
      int m1=now.fi,m2=now.se;
      int om1=m1,om2=m2;
      int i=pos[m1+m2],x=a[i];
      if(i==n){
        if(!m1 && ~pp[m2]){
          r1=m1,r2=m2;break;
        }
        if(~pp[m1] && !m2){          
          r1=m1,r2=m2;break;
        }
        if(~pp[m1] && ~pp[m2] && ~pp[m1+m2]){
          r1=m1,r2=m2;break;
        }
      }
      if(i>=n)continue;
      int lst;
      //right      
      lst=m2&-m2;
      if(!lst || x<=lst){
        int m=m2+x;
        cmb(m1,m);        
        if(vis[m1][m]!=cs && i+1<=n){
          vis[m1][m]=cs;
          pre[m1][m]=pack(om1,om2,1);          
          #ifdef fuck
          puts("right");DEBUG(m1);DEBUG(m);
          #endif
          prt(m1,m2,i);
          prt(m1,m,i+1,pre[m1][m]);
          #ifdef fuck
          puts("");fflush(stdout);
          #endif
          q.push(pii(m1,m));
        }
      }      
      m1=om1,m2=om2;
      lst=m1&-m1;
      out(lst);out(x);
      if(!lst || x<=lst){
        int m=m1+x;
        cmb(m,m2);
        if(vis[m][m2]!=cs && i+1<=n){
          vis[m][m2]=cs;
          pre[m][m2]=pack(om1,om2,0);
          #ifdef fuck
          puts("left");
          #endif
          prt(m1,m2,i);
          prt(m,m2,i+1,pre[m][m2]);//puts("");
          #ifdef fuck
          puts("");fflush(stdout);
          #endif
          q.push(pii(m,m2));
        }
      }      
      m1=om1,m2=om2;      
      if(x>m1 && !m2){
        int m=m1+x;
        cmb(m,m2);
        if(vis[m][m2]!=cs && i+1<=n){
          vis[m][m2]=cs;
          pre[m][m2]=pack(om1,om2,1);
          #ifdef fuck
          puts("bigone");
          #endif
          prt(m1,m2,i);
          prt(m,m2,i+1,pre[m][m2]);//puts("");
          #ifdef fuck
          puts("");fflush(stdout);
          #endif
          q.push(pii(m,m2));
        }
      }
      m1=om1,m2=om2;      
      if(x>m2 && !m1){
        int m=m2+x;
        cmb(m1,m);
        if(vis[m1][m]!=cs && i+1<=n){
          vis[m1][m]=cs;
          pre[m1][m]=pack(om1,om2,0);
          #ifdef fuck
          puts("bigone");
          #endif
          prt(om1,om2,i);
          prt(m1,m,i+1,pre[m1][m]);//puts("");
          #ifdef fuck
          puts("");fflush(stdout);
          #endif
          q.push(pii(m1,m));
        }
      }      
      m1=om1,m2=om2;
      if(m2-(m2&-m2)==0 && m2>m1){
        int pr=pre[m1][m2];
        int mm1=m1+m2,mm2=0;
        cmb(mm1,mm2);
        if(vis[mm1][mm2]!=cs && i+1<=n){
          vis[mm1][mm2]=cs;
          // if(pre[m1][m2]>>30&1)pre[mm1][mm2]=pre[m1][m2]^(1<<30);
          pre[mm1][mm2]=pre[m1][m2];
          #ifdef fuck
          puts("fff1");
          #endif
          prt(m1,m2,i,pr);
          prt(mm1,mm2,i,pre[mm1][mm2]);//puts("");
          #ifdef fuck
          puts("");fflush(stdout);
          #endif
          q.push(pii(mm1,mm2));
        }        
      }
      m1=om1,m2=om2;
      if(m1-(m1&-m1)==0 && m1>m2){        
        int pr=pre[m1][m2];
        int mm2=m1+m2,mm1=0;
        cmb(mm1,mm2);        
        if(vis[mm1][mm2]!=cs && i+1<=n){
          vis[mm1][mm2]=cs;
          // if(~pre[m1][m2]>>30&1)pre[mm1][mm2]=pre[m1][m2]^(1<<30);
          pre[mm1][mm2]=pre[m1][m2];
          #ifdef fuck
          puts("fff2");
          #endif
          prt(m1,m2,i,pr);
          prt(mm1,mm2,i,pre[mm1][mm2]);//puts("");
          #ifdef fuck
          puts("");fflush(stdout);
          #endif
          q.push(pii(mm1,mm2));
        }        
      }
      m1=om1,m2=om2;      
    }
    string res;    
    if(~r1){
      int m1=r1,m2=r2;
      int cc=0,k=n;
      while(m1 || m2){
        prt(m1,m2,k--,pre[m1][m2]);
        res+=(pre[m1][m2]>>30&1)?'r':'l';        
        tie(m1,m2)=unpack(pre[m1][m2]);
      }
      FORD(i,res.size()-1,0)putchar(res[i]);puts("");
    }else puts("no");
  }
  return 0;
}
