func_code_string: #include <bits/stdc++.h>   #pragma GCC optimize(3)   inline void read(int &x) { scanf( %d , &x); }   inline void read(long long &x) { scanf( %I64d , &x); }   inline void read(double &x) { scanf( %lf , &x); }   inline void read(long double &x) {     double tmp;     read(tmp);     x = tmp;   }   template <class T>   inline void read(T *a, int n) {     for (int i = (0); i < (n); ++i) read(a[i]);   }   inline void write(int x) { printf( %d , x); }   inline void write(long long x) { printf( %I64d , x); }   inline void write(double x) { printf( %.10lf , x); }   inline void write(long double x) { printf( %.10lf , (double)x); }   template <class T>   inline void writeln(T x) {     write(x);     putchar(  n );   }   template <class T>   inline void writeln(T *a, int n) {     for (int i = (0); i < (n); ++i) {       write(a[i]);       putchar(   );     }     putchar(  n );   }   template <class T>   inline void writelnln(T *a, int n) {     for (int i = (0); i < (n); ++i) writeln(a[i]);   }   int A[5];   std::set<int> res[5][5];   inline void calc(int l, int r) {     std::set<int> &S = res[l][r];     S.clear();     if (l == r) {       S.insert(A[l]);       S.insert(-A[l]);     } else {       for (int m = (l); m < (r); ++m) {         std::set<int> &a = res[l][m], &b = res[m + 1][r];         for (__typeof(a.begin()) aa = a.begin(); aa != a.end(); ++aa)           for (__typeof(b.begin()) bb = b.begin(); bb != b.end(); ++bb) {             S.insert(*aa + *bb);             S.insert(*aa - *bb);             S.insert(*aa * *bb);             S.insert(-*aa + *bb);             S.insert(-*aa - *bb);             S.insert(-*aa * *bb);           }       }     }   }   std::set<int> ANS;   char buf[3000007], *cb = buf;   int main() {     int k, m;     read(k);     read(m);     for (int ls = (0); ls < (10000); ++ls) {       A[0] = ls / 1000;       A[1] = ls / 100 % 10;       A[2] = ls / 10 % 10;       A[3] = ls % 10;       calc(0, 0);       calc(1, 1);       calc(2, 2);       calc(3, 3);       calc(0, 1);       calc(1, 2);       calc(2, 3);       calc(0, 2);       calc(1, 3);       calc(0, 3);       std::set<int> &ans = res[0][3];       for (__typeof(ans.begin()) x = ans.begin(); x != ans.end(); ++x) {         int ttt = abs(k - *x);         if (ttt < 10000) {           ANS.insert(ls * 10000 + ttt);           if (ANS.size() == m) {             for (__typeof(ANS.begin()) it = ANS.begin(); it != ANS.end(); ++it) {               int x = *it;               *(cb++) = x / 10000000 +  0 ;               *(cb++) = x / 1000000 % 10 +  0 ;               *(cb++) = x / 100000 % 10 +  0 ;               *(cb++) = x / 10000 % 10 +  0 ;               *(cb++) = x / 1000 % 10 +  0 ;               *(cb++) = x / 100 % 10 +  0 ;               *(cb++) = x / 10 % 10 +  0 ;               *(cb++) = x % 10 +  0 ;               *(cb++) =   n ;             }             fwrite(buf, 1, cb - buf, stdout);             return 0;           }         }       }     }     return 0;   }   