#include <bits/stdc++.h>
using namespace std;
int n;
int d[1 << 8][1 << 8][1 << 8];
int p[1 << 8][1 << 8][1 << 8];
char type[1 << 8][1 << 8][1 << 8];
int q[1 << 24];
int qh, qt;
int N = 0;
int can[1 << 20];
int a[3], v[3];
void get(int* A) {
  N = 0;
  for (int i = 0; i < 3; ++i) {
    for (int j = 0; j < 3; ++j) {
      for (int k = 0; k <= 3; ++k) {
        for (int t = 0; t < 3; ++t) v[t] = A[t];
        v[i] = v[j] * (1 << k);
        if (v[i] > 255) continue;
        if (d[v[0]][v[1]][v[2]] != -1) continue;
        for (int t = 0; t < 3; ++t) can[N++] = v[t];
        can[N++] =
            (A[2] << 22) | (A[1] << 14) | (A[0] << 6) | (i << 4) | (j << 2) | k;
        can[N++] = 1;
      }
    }
  }
  for (int i = 0; i < 3; ++i) {
    for (int j = 0; j < 3; ++j) {
      for (int ii = 0; ii < 3; ++ii) {
        for (int k = 0; k <= 3; ++k) {
          for (int t = 0; t < 3; ++t) v[t] = A[t];
          v[ii] = v[i] + v[j] * (1 << k);
          if (v[ii] > 255) continue;
          if (d[v[0]][v[1]][v[2]] != -1) continue;
          for (int t = 0; t < 3; ++t) can[N++] = v[t];
          can[N++] = (A[2] << 24) | (A[1] << 16) | (A[0] << 8) | (ii << 6) |
                     (i << 4) | (j << 2) | k;
          can[N++] = 2;
        }
      }
    }
  }
}
char buf[1 << 8];
int main() {
  scanf("%d", &n);
  memset(d, -1, sizeof(d));
  d[1][0][0] = 0;
  q[qt++] = 1;
  int A, B, C;
  A = B = C = -1;
  while (qh < qt) {
    a[0] = q[qh] & 255;
    a[1] = (q[qh] & 65280) >> 8;
    a[2] = (q[qh] & 16711680) >> 16;
    qh++;
    if (a[0] == n || a[1] == n || a[2] == n) {
      A = a[0];
      B = a[1];
      C = a[2];
      break;
    }
    get(a);
    for (int i = 0; i < N; i += 5) {
      if (d[can[i]][can[i + 1]][can[i + 2]] != -1) continue;
      d[can[i]][can[i + 1]][can[i + 2]] = d[a[0]][a[1]][a[2]] + 1;
      p[can[i]][can[i + 1]][can[i + 2]] = can[i + 3];
      type[can[i]][can[i + 1]][can[i + 2]] = can[i + 4];
      int add = (can[i + 2] << 16) | (can[i + 1] << 8) | can[i];
      q[qt++] = add;
    }
  }
  printf("%d\n", d[A][B][C]);
  vector<string> res;
  while (d[A][B][C] > 0) {
    int back = p[A][B][C];
    if (type[A][B][C] & 1) {
      int i, j, k;
      k = 1 << (back & 3);
      back >>= 2;
      j = back & 3;
      back >>= 2;
      i = back & 3;
      back >>= 2;
      A = back & 255;
      back >>= 8;
      B = back & 255;
      back >>= 8;
      C = back & 255;
      memset(buf, 0, sizeof(buf));
      sprintf(buf, "lea e%cx, [%d*e%cx]", 'a' + i, k, 'a' + j);
      res.push_back(string(buf));
    } else {
      int ii, i, j, k;
      k = 1 << (back & 3);
      back >>= 2;
      j = back & 3;
      back >>= 2;
      i = back & 3;
      back >>= 2;
      ii = back & 3;
      back >>= 2;
      A = back & 255;
      back >>= 8;
      B = back & 255;
      back >>= 8;
      C = back & 255;
      memset(buf, 0, sizeof(buf));
      sprintf(buf, "lea e%cx, [e%cx + %d*e%cx]", 'a' + ii, 'a' + i, k, 'a' + j);
      res.push_back(string(buf));
    }
  }
  reverse(res.begin(), res.end());
  for (int i = 0; i < res.size(); ++i) printf("%s\n", res[i].c_str());
  return 0;
}
