func_code_string: #include <bits/stdc++.h>   using namespace std;   int ins[300];   struct Rec {     int n, p;     int a[10];   } st[1000000];   void Print(int now) {     int i, j, x, pre, ret;     if (now == 0) return;     pre = st[now].p;     ret = st[now].a[st[now].n - 1];     for (i = 0; i < st[pre].n; i++)       for (x = 2; x <= 8; x <<= 1)         if (st[pre].a[i] * x == ret) {           Print(pre);           printf( lea e%cx, [%d*e%cx] n , st[now].n +  a  - 1, x,  a  + i);           return;         }     for (i = 0; i < st[pre].n; i++)       for (j = 0; j < st[pre].n; j++)         for (x = 1; x <= 8; x <<= 1)           if (st[pre].a[i] + st[pre].a[j] * x == ret) {             Print(pre);             printf( lea e%cx, [e%cx + %d*e%cx] n , st[now].n +  a  - 1, i +  a ,                    x, j +  a );             return;           }   }   int main() {     int i, j, n, x, low, top, lim, ret;     scanf( %d , &n);     if (n == 1) {       puts( 0 );       return 0;     }     st[0].n = 1;     st[0].a[0] = 1;     for (low = top = 0; low <= top; low++) {       memset(ins, 0, sizeof(ins));       lim = st[low].a[st[low].n - 1];       for (i = 0; i < st[low].n; i++)         for (x = 2; x <= 8; x <<= 1) {           ret = st[low].a[i] * x;           if (ret <= lim || ret > n) continue;           ins[ret] = 1;         }       for (i = 0; i < st[low].n; i++)         for (j = 0; j < st[low].n; j++)           for (x = 1; x <= 8; x <<= 1) {             ret = st[low].a[i] + st[low].a[j] * x;             if (ret <= lim || ret > n) continue;             ins[ret] = 1;           }       for (i = lim + 1; i <= n; i++)         if (ins[i]) {           st[++top].n = st[low].n;           for (j = 0; j < st[low].n; j++) st[top].a[j] = st[low].a[j];           st[top].a[st[top].n++] = i;           st[top].p = low;           if (i == n) {             printf( %d n , st[top].n - 1);             Print(top);             return 0;           }         }     }     return 0;   }   