#include <bits/stdc++.h>
#pragma GCC target("sse,sse2,sse3,sse4.1,sse4.2,popcnt,abm,mmx,avx")
#pragma comment(linker, "/STACK:102400000,102400000")
#pragma GCC optimize("Ofast")
#pragma GCC optimize("inline")
#pragma GCC optimize("-fgcse")
#pragma GCC optimize("-fgcse-lm")
#pragma GCC optimize("-fipa-sra")
#pragma GCC optimize("-ftree-pre")
#pragma GCC optimize("-ftree-vrp")
#pragma GCC optimize("-fpeephole2")
#pragma GCC optimize("-ffast-math")
#pragma GCC optimize("-fsched-spec")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("-falign-jumps")
#pragma GCC optimize("-falign-loops")
#pragma GCC optimize("-falign-labels")
#pragma GCC optimize("-fdevirtualize")
#pragma GCC optimize("-fcaller-saves")
#pragma GCC optimize("-fcrossjumping")
#pragma GCC optimize("-fthread-jumps")
#pragma GCC optimize("-funroll-loops")
#pragma GCC optimize("-freorder-blocks")
#pragma GCC optimize("-fschedule-insns")
#pragma GCC optimize("inline-functions")
#pragma GCC optimize("-ftree-tail-merge")
#pragma GCC optimize("-fschedule-insns2")
#pragma GCC optimize("-fstrict-aliasing")
#pragma GCC optimize("-fstrict-overflow")
#pragma GCC optimize("-falign-functions")
#pragma GCC optimize("-fcse-follow-jumps")
#pragma GCC optimize("-fsched-interblock")
#pragma GCC optimize("-fpartial-inlining")
#pragma GCC optimize("no-stack-protector")
#pragma GCC optimize("-freorder-functions")
#pragma GCC optimize("-findirect-inlining")
#pragma GCC optimize("-fhoist-adjacent-loads")
#pragma GCC optimize("-frerun-cse-after-loop")
#pragma GCC optimize("inline-small-functions")
#pragma GCC optimize("-finline-small-functions")
#pragma GCC optimize("-ftree-switch-conversion")
#pragma GCC optimize("-foptimize-sibling-calls")
#pragma GCC optimize("-fexpensive-optimizations")
#pragma GCC optimize("inline-functions-called-once")
#pragma GCC optimize("-fdelete-null-pointer-checks")
using namespace std;
struct Statement {
  int w, x, y, z;
  Statement(int w, int x, int y, int z) : w(w), x(x), y(y), z(z) {}
  string printToStr() {
    string ret = "";
    ret += "lea e";
    ret = ret + char('a' + w) + "x, [";
    if (x != -1) ret = ret + "e" + char('a' + x) + "x + ";
    if (y != -1) ret = ret + char('0' + y) + "*";
    if (z != -1) ret = ret + "e" + char('a' + z);
    return ret + "x]";
  }
};
vector<Statement> v;
vector<string> ans;
int n, a[100], ansL = 6, f[300];
void dfs(int dep, int cur) {
  if (dep > ansL || cur > n) return;
  a[dep - 1] = cur;
  if (cur == n) {
    if (ansL > dep - 1) {
      ans.resize(ansL = (dep - 1));
      for (int i = 0; i < dep - 1; i++) {
        ans[i] = v[i].printToStr();
      }
    }
    return;
  }
  for (int k = dep - 1; k >= max(0, dep - 2); k--)
    for (int i = 0; i < dep; i++) {
      for (int j = 1; j <= 3; j++) {
        v.push_back(Statement(dep, -1, (1 << j), k));
        dfs(dep + 1, a[k] * (1 << j));
        v.pop_back();
      }
      for (int j = 1; j <= 3; j++) {
        v.push_back(Statement(dep, i, (1 << j), k));
        dfs(dep + 1, a[k] * (1 << j) + a[i]);
        v.pop_back();
      }
      v.push_back(Statement(dep, i, -1, k));
      dfs(dep + 1, a[k] + a[i]);
      v.pop_back();
    }
}
int main() {
  while (cin >> n) {
    ansL = 6;
    dfs(1, 1);
    cout << ansL << endl;
    for (auto it : ans) cout << it << endl;
  }
  return 0;
}
