#include <bits/stdc++.h>
using namespace std;
int32_t main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  const long long Max = 255;
  vector<long long> memo(300, 100);
  vector<long long> getID(300);
  memo[0] = memo[1] = 0;
  priority_queue<pair<long long, vector<pair<long long, long long>>>> q;
  long long ID = 0;
  q.push({0, {{1, 0}}});
  map<pair<long long, long long>, long long> prev;
  map<pair<long long, long long>, pair<long long, long long>> prevI;
  map<pair<long long, long long>, pair<long long, long long>> prevJ;
  map<pair<long long, long long>, long long> prevK;
  vector<set<vector<pair<long long, long long>>>> hereSeen(300);
  hereSeen[0].insert({{1, 0}});
  while (!q.empty()) {
    ID++;
    long long opps = -q.top().first;
    vector<pair<long long, long long>> nums = q.top().second;
    q.pop();
    if (nums.size() > 8) continue;
    for (long long i = 0; i < nums.size(); ++i) {
      for (long long j = i; j < nums.size(); ++j) {
        long long sum = nums[i].first + nums[j].first;
        if (sum > Max) continue;
        if (memo[sum] > 1 + opps ||
            (memo[sum] == 1 + opps && !hereSeen[sum].count(nums))) {
          getID[sum] = ID;
          hereSeen[sum].insert(nums);
          memo[sum] = 1 + opps;
          nums.push_back({sum, ID});
          q.push({-memo[sum], nums});
          nums.pop_back();
          prev[{sum, ID}] = 0;
          prevI[{sum, ID}] = nums[i];
          prevJ[{sum, ID}] = nums[j];
          ID++;
        }
      }
    }
    for (long long i = 0; i < nums.size(); ++i) {
      for (long long k = 2; k <= 8; k *= 2) {
        long long sum = nums[i].first * k;
        if (sum > Max) continue;
        if (memo[sum] > 1 + opps ||
            (memo[sum] == 1 + opps && !hereSeen[sum].count(nums))) {
          getID[sum] = ID;
          hereSeen[sum].insert(nums);
          memo[sum] = 1 + opps;
          nums.push_back({sum, ID});
          q.push({-memo[sum], nums});
          nums.pop_back();
          prev[{sum, ID}] = 1;
          prevI[{sum, ID}] = nums[i];
          prevK[{sum, ID}] = k;
          ID++;
        }
      }
    }
    for (long long i = 0; i < nums.size(); ++i) {
      for (long long j = 0; j < nums.size(); ++j) {
        for (long long k = 2; k <= 8; k *= 2) {
          long long sum = nums[i].first + k * nums[j].first;
          if (sum > Max) continue;
          if (memo[sum] > 1 + opps ||
              (memo[sum] == 1 + opps && !hereSeen[sum].count(nums))) {
            getID[sum] = ID;
            hereSeen[sum].insert(nums);
            memo[sum] = 1 + opps;
            nums.push_back({sum, ID});
            q.push({-memo[sum], nums});
            nums.pop_back();
            prev[{sum, ID}] = 2;
            prevI[{sum, ID}] = nums[i];
            prevJ[{sum, ID}] = nums[j];
            prevK[{sum, ID}] = k;
            ID++;
          }
        }
      }
    }
  }
  long long n;
  cin >> n;
  cout << memo[n] << '\n';
  vector<long long> nums;
  queue<pair<long long, long long>> qu;
  qu.push({n, getID[n]});
  set<long long> seen;
  seen.insert(n);
  while (!qu.empty()) {
    long long curr = qu.front().first;
    long long currID = qu.front().second;
    getID[curr] = currID;
    qu.pop();
    if (curr <= 1) continue;
    nums.push_back(curr);
    if (prev[{curr, currID}] == 0) {
      long long i = prevI[{curr, currID}].first;
      long long nextID = prevI[{curr, currID}].second;
      long long j = prevJ[{curr, currID}].first;
      if (!seen.count(i)) {
        qu.push({i, nextID});
        seen.insert(i);
      }
      nextID = prevJ[{curr, currID}].second;
      if (!seen.count(j)) {
        qu.push({j, nextID});
        seen.insert(j);
      }
    } else if (prev[{curr, currID}] == 1) {
      long long i = prevI[{curr, currID}].first;
      long long nextID = prevI[{curr, currID}].second;
      if (!seen.count(i)) {
        qu.push({i, nextID});
        seen.insert(i);
      }
    } else {
      long long i = prevI[{curr, currID}].first;
      long long nextID = prevI[{curr, currID}].second;
      long long j = prevJ[{curr, currID}].first;
      if (!seen.count(i)) {
        qu.push({i, nextID});
        seen.insert(i);
      }
      nextID = prevJ[{curr, currID}].second;
      if (!seen.count(j)) {
        qu.push({j, nextID});
        seen.insert(j);
      }
    }
  }
  sort(nums.begin(), nums.end());
  map<long long, char> toReg;
  toReg[1] = 'a';
  char nextReg = 'b';
  for (long long curr : nums) {
    long long currID = getID[curr];
    toReg[curr] = nextReg;
    cout << "lea e" << nextReg << "x, [";
    if (prev[{curr, currID}] == 0) {
      long long i = prevI[{curr, currID}].first;
      long long j = prevJ[{curr, currID}].first;
      cout << "e" << toReg[i] << "x + e" << toReg[j];
    } else if (prev[{curr, currID}] == 1) {
      long long i = prevI[{curr, currID}].first;
      long long k = prevK[{curr, currID}];
      cout << k << "*e" << toReg[i];
    } else {
      long long i = prevI[{curr, currID}].first;
      long long j = prevJ[{curr, currID}].first;
      long long k = prevK[{curr, currID}];
      cout << "e" << toReg[i] << "x + " << k << "*e" << toReg[j];
    }
    cout << "x]\n";
    nextReg++;
  }
  return 0;
}
