#include <bits/stdc++.h>
using namespace std;
const int inf = 1999999999;
const double pi = acos(-1.0);
const double eps = 1e-10;
char gc() {
  char c;
  while (isspace(c = getchar()))
    ;
  return c;
}
int gs(char* s) {
  gets(s);
  int l = strlen(s);
  while (l && isspace(s[l - 1])) s[--l] = 0;
  return l;
}
struct tri {
  unsigned h;
  int a, b, c;
  tri() {}
  tri(unsigned th, int ta, int tb, int tc) {
    h = th;
    a = ta;
    b = tb;
    c = tc;
  }
};
map<unsigned, pair<int, tri> > dp;
map<unsigned, pair<int, tri> >::iterator it;
int n;
int dfs(unsigned h, vector<int> p) {
  if (p.back() == n) return 0;
  if (((int)(p).size()) > 5) return inf;
  if (((int)(p).size()) >= 2 && p.back() <= p[((int)(p).size()) - 2])
    return inf;
  if (p.back() > n) return inf;
  it = dp.find(h);
  if (it != dp.end())
    return it->second.first;
  else {
    int ans = inf, t;
    tri best;
    for (int i = 0; i < ((int)(p).size()); i++) {
      p.push_back(8 * p[i]);
      t = dfs(h * 10007 + p.back(), p);
      if (t < ans) {
        ans = t;
        best = tri(h * 10007 + p.back(), -1, i, 8);
      }
      p.pop_back();
      p.push_back(4 * p[i]);
      t = dfs(h * 10007 + p.back(), p);
      if (t < ans) {
        ans = t;
        best = tri(h * 10007 + p.back(), -1, i, 4);
      }
      p.pop_back();
      p.push_back(2 * p[i]);
      t = dfs(h * 10007 + p.back(), p);
      if (t < ans) {
        ans = t;
        best = tri(h * 10007 + p.back(), -1, i, 2);
      }
      p.pop_back();
    }
    for (int i = 0; i < ((int)(p).size()); i++)
      for (int j = 0; j < ((int)(p).size()); j++) {
        p.push_back(p[i] + 8 * p[j]);
        t = dfs(h * 10007 + p.back(), p);
        if (t < ans) {
          ans = t;
          best = tri(h * 10007 + p.back(), i, j, 8);
        }
        p.pop_back();
        p.push_back(p[i] + 4 * p[j]);
        t = dfs(h * 10007 + p.back(), p);
        if (t < ans) {
          ans = t;
          best = tri(h * 10007 + p.back(), i, j, 4);
        }
        p.pop_back();
        p.push_back(p[i] + 2 * p[j]);
        t = dfs(h * 10007 + p.back(), p);
        if (t < ans) {
          ans = t;
          best = tri(h * 10007 + p.back(), i, j, 2);
        }
        p.pop_back();
        p.push_back(p[i] + p[j]);
        t = dfs(h * 10007 + p.back(), p);
        if (t < ans) {
          ans = t;
          best = tri(h * 10007 + p.back(), i, j, 1);
        }
        p.pop_back();
      }
    ans++;
    dp[h] = make_pair(ans, best);
    return ans;
  }
}
int main() {
  cin >> n;
  vector<int> t;
  t.push_back(1);
  printf("%d\n", dfs(0, t));
  unsigned a = 0;
  int c = 1;
  while (true) {
    it = dp.find(a);
    if (it == dp.end()) return 0;
    tri b = it->second.second;
    if (b.a == -1)
      printf("lea e%cx, [%d*e%cx]\n", c + 'a', b.c, b.b + 'a');
    else
      printf("lea e%cx, [e%cx + %d*e%cx]\n", c + 'a', b.a + 'a', b.c,
             b.b + 'a');
    a = b.h;
    c++;
  }
}
