#include <bits/stdc++.h>
using namespace std;
int n, res = 26, first[256];
set<vector<int> > check;
vector<tuple<int, int, int> > vec;
inline void dfs(vector<int> nums, vector<tuple<int, int, int> > change) {
  int sz = nums.size();
  if (nums.back() == n) {
    res = sz - 1;
    vec = change;
    return;
  }
  first[nums.back()] = sz;
  for (int i = 0; i < nums.size(); i++) {
    for (int j = 0; j < nums.size(); j++) {
      for (int k = 1; k <= min(8, (n - nums[i]) / nums[j]); k *= 2) {
        nums.push_back(nums[i] + k * nums[j]);
        if (first[nums[i] + k * nums[j]] >= sz + 1 && sz + 1 <= res &&
            check.find(nums) == check.end()) {
          change.push_back(make_tuple(i, k, j));
          check.insert(nums);
          dfs(nums, change);
          change.pop_back();
        }
        nums.pop_back();
      }
    }
    for (int k = 1; k <= min(8, n / nums[i]); k *= 2) {
      nums.push_back(nums[i] * k);
      change.push_back(make_tuple(-1, k, i));
      if (first[nums[i] * k] >= sz + 1 && sz + 1 <= res &&
          check.find(nums) == check.end()) {
        check.insert(nums);
        dfs(nums, change);
      }
      nums.pop_back();
      change.pop_back();
    }
  }
}
int main() {
  cin >> n;
  for (int i = 1; i <= 255; i++) {
    first[i] = 0x3f3f3f3f;
  }
  vector<tuple<int, int, int> > go;
  dfs(vector<int>(1, 1), go);
  cout << res << endl;
  for (int i = 0; i < vec.size(); i++) {
    cout << "lea e" << char('a' + i + 1) << "x, [";
    if (get<0>(vec[i]) == -1) {
      cout << get<1>(vec[i]) << "*e" << char('a' + get<2>(vec[i]));
    } else {
      cout << "e" << char('a' + get<0>(vec[i])) << "x + " << get<1>(vec[i])
           << "*e" << char('a' + get<2>(vec[i]));
    }
    cout << "x]" << endl;
  }
  return 0;
}
