#include <bits/stdc++.h>
const int inf = 0x3f3f3f3f;
template <class T>
inline void read(T &x) {
  T f = 1;
  x = 0;
  char s = getchar();
  while (s < '0' || s > '9') {
    if (s == '-') f = -1;
    s = getchar();
  }
  while (s >= '0' && s <= '9') {
    x = x * 10 + s - '0';
    s = getchar();
  }
  x *= f;
}
const int N = 256;
int a[8], sta[8], mxd, tag = 1, n;
struct Node {
  int tag, i, j, k;
} fr[8];
inline void print() {
  tag = 0;
  printf("%d\n", mxd);
  for (int i = 2; i <= mxd + 1; i++) {
    if (fr[i].tag == 1)
      printf("lea e%cx, [%d*e%cx]\n", i + 'a' - 1, (1 << fr[i].j),
             fr[i].i + 'a' - 1);
    else
      printf("lea e%cx, [e%cx + %d*e%cx]\n", i + 'a' - 1, fr[i].i + 'a' - 1,
             (1 << fr[i].k), fr[i].j + 'a' - 1);
  }
}
inline void dfs(int *p, int dep) {
  if (p[dep + 1] > n) return;
  if (p[dep + 1] == n) print(), exit(0);
  if (dep >= mxd) return;
  for (int i = 1; i <= dep + 1; i++) {
    if (!p[i]) continue;
    for (int k = 0; k <= 3; k++)
      fr[dep + 2] = {1, i, k, 0}, p[dep + 2] = p[i] * (1 << k), dfs(p, dep + 1),
               p[dep + 2] = 0;
    for (int j = 1; j <= dep + 1; j++)
      for (int k = 0; k <= 3; k++)
        fr[dep + 2] = {2, i, j, k}, p[dep + 2] = p[i] + (1 << k) * p[j],
                 dfs(p, dep + 1), p[dep + 2] = 0;
  }
}
inline void solve() {
  read(n);
  if (n == 1) return (void)(printf("0"));
  int p[8];
  for (int i = 1; i <= 7; i++) p[i] = 0;
  p[1] = 1;
  for (mxd = 1; mxd <= 7 && tag; mxd++) dfs(p, 0);
}
int main() { solve(); }
