/*
TASK:risc
LANG:C++
*/
#include <stdio.h>
#include <string.h>
//#include <mem.h>
typedef enum {inc_A,inc_B,add_,equ_AB,equ_AC,equ_BA,cmp_,loop_} Op;
char instr[8][5]={"   A","   B","   +"," A=B",
                  " A=C"," B=A","   ?","LOOP"};
typedef struct{long A,B,C;} RISC;
RISC proc;
void incA(void){proc.A++;}
void incB(void){proc.B++;}
void add(void){proc.A+=proc.B;}
void equAB(void){proc.A=proc.B;}
void equAC(void){proc.A=proc.C;}
void equBA(void){proc.B=proc.A;}
void (*inst[6])(void)={incA,incB,add,equAB,equAC,equBA};
Op tmp[9],sol[9]={equ_BA,inc_A,cmp_,inc_B,
                  add_,add_,add_,add_,loop_};
int cnt=9;
long res;
char *bare(char *s)
{while (*s==' ') s++;
 return s;
}
void show(void)
{printf("%d\n",cnt);
 for (int i=0;i<cnt;i++)
  printf("%s\n",bare(instr[sol[i]]));
}
int Interpret(int cnt)
{proc.A=0;
 proc.B=1;
 int IP=0,lp=-1,cyc=0;
 long oldB;
 while (IP<cnt)
 {if (cyc>proc.C+1) return 0;
  if (proc.A>res&&proc.B>res) return 0;
  if (tmp[IP]<cmp_) {inst[tmp[IP]]();
		     IP++;
		     continue;
		    }
  if (tmp[IP]==loop_)
  {if (lp<0||proc.B==oldB) return 0;
   IP=lp;
   continue;
  }
//cmp_
  if (proc.B<proc.C){lp=IP;
                     cyc++;
		     oldB=proc.B;
		     IP++;
		     continue;
		    }
   while (IP<cnt&&tmp[IP]!=loop_) IP++;
   if (IP>=cnt) return 0;
   lp=-1;
   cyc=0;
   IP++;
 }
 return 1;
}
void find(int lev,int lp)
{Op o;
 RISC p=proc;
 if (lev>=cnt||proc.A>res) return;
 if (!lp&&proc.A==res)
 {cnt=lev;
  memcpy(sol,tmp,cnt*sizeof(Op));
  return;
 }
 for (o=inc_A;o<=loop_;((int)o)++)
 {//Don't consider combinations like:
  // A=B;A=B, A=B;B=A and the sort
  if ((o==equ_AB||o==equ_BA)&&lev>0&&(tmp[lev-1]==equ_AB||tmp[lev-1]==equ_BA)) continue;
  //A=C;A=B, A=C;A=C
  if (o==equ_AC&&lev>0&&(tmp[lev-1]==equ_AB||tmp[lev-1]==equ_AC)) continue;
  //A;A=B, A;A=C, B;B=A - no point
  if (o==equ_AB&&lev>0&&tmp[lev-1]==inc_A) continue;
  if (o==equ_AC&&lev>0&&tmp[lev-1]==inc_A) continue;
  if (o==equ_BA&&lev>0&&tmp[lev-1]==inc_B) continue;
  //? before LOOP
  if (o==cmp_&&lp) continue;
  //LOOP before ?
  if (o==loop_&&!lp) continue;
  //add;A - it is equivalent to A;add - already considered
  if (o==inc_A&&lev>0&&tmp[lev-1]==add_) continue;
  //at the beginning + and A=B are equivalent to A - considered
  if(!lev&&(o==add_||o==equ_AB)) continue;
  tmp[lev]=o;
  if (o==cmp_){find(lev+1,1);proc=p;continue;}
  if (o==loop_){if (!Interpret(lev+1)) {proc=p;continue;}
                find(lev+1,0);
		proc=p;
		continue;
	       }
  inst[o]();
  find(lev+1,lp);
  proc=p;
 }
}
long f(long n)
{return n*n+(n+1)*(n+1);}
int main(void)
{int n;
 scanf("%d",&n);
 proc.C=n;
 proc.A=0;
 proc.B=1;
 res=f(n);
 cnt=9;
 if (n<7) find(0,0);
 show();
 return 0;
}
