#include <stdio.h>
#include <string.h>

#define MAXW 1000
#define MAX_NAVEST 10000

#define ADDRW 3
  /* pro 3 je napsano skok(), jinak ostatni je OK */

int stavy;
int stav_dovozy[10]; /* cisla stavu pro dovozy promennych */
int stav_jump;
int flag_navesti[MAX_NAVEST]; /* ktery stav odpovida navesti */
int pocet_navesti;
int stav_secti;
int stav_nasob;
int stav_start;
int stav_end;

/* prechodem do stavu dovozy[p] doveze hodnotu dane promenne 
   na policko se symbolem 10 */
void dovozy()
{
  int i, j, szpet;

  /* dovez hodnotu zpet a zapis ji (na symbol 10) */
  szpet=stavy;
  for (i=0; i<10; i++)
  {
    for (j=-1; j<10; j++)
     printf("%d %d %d %d L\n", stavy, j, j, stavy);
    printf("%d %d %d %d L\n", stavy, 10, i, stav_jump);
    stavy++;
  }
  
  /* najdi danou promennou */
  for (i=0; i<10; i++)
  {
    stav_dovozy[i]=stavy++;
    
    /* preskoc cela cisla */
    for (j=0; j<10; j++)
     printf("%d %d %d %d R\n", stav_dovozy[i], j, j, stav_dovozy[i]);
     
    /* preved na podproblem */
    if (i>0)
      printf("%d %d %d %d R\n", stav_dovozy[i], -1, -1, stav_dovozy[i-1]); else
    { /* dojeli jsme na hledane cislo, nacti jej a posli zpet */
      int s0;

      /* postav se nad nalezene cislo (stojime za) */      
      s0=stavy++;
      printf("%d %d %d %d L\n", stav_dovozy[i], -1, -1, s0);
      /* precti jej a posli zpet */
      for (j=0; j<10; j++)
        printf("%d %d %d %d R\n", s0, j, j, szpet + j);
    }
  }
}

/* stoji na policku vlevo od adresy, prenesu tu hodnotu za adresu,
   smazu adresu a prejdu na tento stav, zustane stat nad tou hodnotou. */
void skoky()
{
  int i, k, i0, i1, i2, j, s0, s1, st, st1, st2;
  
  /* ignoruj pripadna prazdna policka */
  printf("%d %d %d %d R\n", stav_jump, -1, -1, stav_jump);
  
  /* prevez hodnotu za adresu */
  st=stavy++;
  for (j=0; j<10; j++)
  {
    s0=stavy++;
    printf("%d %d %d %d R\n", stav_jump, j, -1, s0);
    for (k=0; k<ADDRW; k++)
    {
      s1=stavy++;
      for (i=0; i<10; i++)
        printf("%d %d %d %d R\n", s0, i, i, s1);
      s0=s1;
    }
    printf("%d %d %d %d L\n", s0, 0, j, st);
  }
  st1=st;
  for (k=0; k<ADDRW-1; k++)
  {
    st2=stavy++;
    for (i=0; i<10; i++)
      printf("%d %d %d %d L\n", st1, i, i, st2);
    st1=st2;
  }
  /* nyni stoji na 1. policku adresy - chce prejit na tento stav a skoncit za adresou */
  
  for (i0=0; i0<10; i0++)
  {
    int us1;
    
    us1=0;
    s0=stavy++;
    
    for (i1=0; i1<10; i1++)
    {
      int us2;
      
      us2=0;
      s1=stavy++;
      
      for (i2=0; i2<10; i2++)
      {
        int v;
        
        v=i0+i1*10+i2*100;
        if (v < pocet_navesti)
        {
          printf("%d %d %d %d R\n", s1, i2, -1, flag_navesti[v]);
          us1=1;
          us2=1;
        }
      }
        
      if (us2) /* vetev ma smysl */
        printf("%d %d %d %d R\n", s0, i1, -1, s1); else
        stavy--;
    }
    if (us1) /* vetev ma smysl */
      printf("%d %d %d %d R\n", st1, i0, -1, s0); else
      stavy--;
  }
}

/* stoji na pozici leveho z paru a na konci bude stat zde take,
   leve cislo smaze a zmeni na dany stav (zapsany vlevo) */
void nasobeni()
{
  int i, j, s0;
  
  for (i=0; i<10; i++)
  {
    s0=stavy++;
    printf("%d %d %d %d R\n", stav_nasob, i, -1, s0);  
   
    for (j=0; j<10; j++)
     printf("%d %d %d %d L\n", s0, j, (i*j) % 10, stav_jump);
  }
}

void scitani() /* stejne jak nasobeni */
{
  int i, j, s0;
  
  for (i=0; i<10; i++)
  {
    s0=stavy++;
    printf("%d %d %d %d R\n", stav_secti, i, -1, s0);  
   
    for (j=0; j<10; j++)
     printf("%d %d %d %d L\n", s0, j, (i+j) % 10, stav_jump);
  }
}

void zapis_navesti(int sinit, int cislo, int stav)
{
  int s0, s1, k, m;
  
  flag_navesti[pocet_navesti]=cislo;

  s0=stavy++;
  printf("%d %d %d %d L\n", sinit, -1, 0, s0); /* neco, co neni 10 ani -1 tam dej */
  m=1;
  for (k=1; k<ADDRW; k++) m*=10;
  for (k=0; k<ADDRW; k++)
  {
    if (k<ADDRW-1) s1=stavy++; else s1=stav;
    
    printf("%d %d %d %d L\n", s0, -1, (pocet_navesti / m) % 10, s1);
    m/=10;
    
    s0=s1;
  }
  pocet_navesti++;
}

void vyhodnoceni(int stav, char * ex, int b)
{
  if (b==1) 
  {
    printf("%d %d %d %d R\n", stav, -1, 10, stav_dovozy[ex[0]-'1'+1]);
  } else
  {
    int pl = -1, mu = -1, v=0, i;
    for (i=0; i<b; i++)
     if (ex[i]=='(') v++; else
     if (ex[i]==')') v--; else
     if ((v==0)&&(ex[i]=='+')) pl=i; else
     if ((v==0)&&(ex[i]=='*')) mu=i;
     
    if (pl!=-1) 
    { 
      int s1, s2, s3, s4, s5, s6, j;
      s1=stavy++;
      s2=stavy++;
      s3=stavy++;
      s4=stavy++;
      s5=stavy++;
      s6=stavy++;
      
      zapis_navesti(stav, s2, s1);
      vyhodnoceni(s1, ex, pl);
      
      for (j=0; j<10; j++)
        printf("%d %d %d %d L\n", s2, j, j, s3);
      
      zapis_navesti(s3, s5, s4);
      vyhodnoceni(s4, ex+pl+1, b-1-pl); 
      
      /* postav se vlevo od paru */
      for (j=0; j<10; j++)
        printf("%d %d %d %d L\n", s5, j, j, s6);
      
      printf("%d %d %d %d R\n", s6, -1, -1, stav_secti);
    } else
    if (mu!=-1)
    {
      int s1, s2, s3, s4, s5, s6, j;
      s1=stavy++;
      s2=stavy++;
      s3=stavy++;
      s4=stavy++;
      s5=stavy++;
      s6=stavy++;
      
      zapis_navesti(stav, s2, s1);
      vyhodnoceni(s1, ex, mu);
      
      for (j=0; j<10; j++)
        printf("%d %d %d %d L\n", s2, j, j, s3);
      
      zapis_navesti(s3, s5, s4);
      vyhodnoceni(s4, ex+mu+1, b-1-mu);
      
      /* postav se vlevo od paru */
      for (j=0; j<10; j++)
        printf("%d %d %d %d L\n", s5, j, j, s6);
      
      printf("%d %d %d %d R\n", s6, -1, -1, stav_nasob);
    } else
    if ((ex[0]!='(')||(ex[b-1]!=')')) printf("ERR\n"); else
      vyhodnoceni(stav, ex+1, b-2);
  }
}



int main()
{
  char st[MAXW];
  int i, j, minp, maxp, p, pm, pocet;
  FILE * fi;

/*  fi=fopen("t.in", "rt"); */
  fi=stdin;
  fscanf(fi, "%d\n", &pocet);
  while (pocet-->0)
  {
  fscanf(fi, "%s\n", st);
  pocet_navesti=0;
  stavy=0;
  minp=-1;
  maxp=-1;
  pm=0;
  for (i=0; st[i]; i++)
  {
   if ((st[i]>='0') && (st[i]<='9'))
   {
     if ((minp==-1) || (st[i] < minp)) minp=st[i];
     if ((maxp==-1) || (st[i] > maxp)) maxp=st[i];
   }
   if ((st[i]=='+') || (st[i]=='*')) pm=1;
  }
   
  p=maxp-'0';
  if (! pm)
  {
    printf("%d %d\n", 9, p-1);
    for (i=1; i<p; i++)
    {
      for (j=0; j<10; j++) printf("%d %d %d %d R\n", i-1, j, j, i-1);
      printf("%d -1 -1 %d R\n", i-1, i);
    }       
  } else
  {
    int j;
    int stav_start2, stav_start3, stav_start4;
    
    printf("%d %d\n", 10, 5000);
    stav_start=stavy++; /* stav 0, pocatecni stav */
    stav_jump=stavy++;  /* stav 1, skoky */
    stav_nasob=stavy++; /* stav 2, nasobeni */
    stav_secti=stavy++; /* stav 3, scitani */
    stav_end=stavy++;   /* stav 4, koncovy stav */
    dovozy();

    stav_start2=stavy++;
    stav_start3=stavy++;
    stav_start4=stavy++;
    for (j=0; j<10; j++)
     printf("%d %d %d %d L\n", stav_start, j, j, stav_start2);
    printf("%d %d %d %d L\n", stav_start2, -1, -1, stav_start3);

    zapis_navesti(stav_start3, stav_end, stav_start4);
    vyhodnoceni(stav_start4, st, strlen(st));

    skoky();
    nasobeni();
    scitani();
  }

  printf("-\n");  
  }

  return 0;
}
