func_code_string: #include <bits/stdc++.h>   using namespace std;   struct Bitset {     int sz, len;     vector<unsigned int> v;     Bitset(int szz) {       len = szz;       sz = szz + 31 >> 5;       v.clear();       v.resize(sz, 0);     }     Bitset operator<<=(int x) {       int d = x >> 5, r = x & 31;       for (int i = sz - 1; i >= d; i--) v[i] = v[i - d];       for (int i = d - 1; i >= 0; i--) v[i] = 0;       if (r) {         for (int i = sz - 1; i >= 1; i--)           v[i] = ((v[i] & ((1u << 32 - r) - 1)) << r) | (v[i - 1] >> 32 - r);         v[0] = (v[0] & ((1u << 32 - r) - 1)) << r;       }     }     Bitset operator|(const Bitset &b) {       Bitset rlt = Bitset(len);       for (int i = 0; i < sz; i++) rlt.v[i] = v[i] | b.v[i];       return rlt;     }     Bitset operator^(const Bitset &b) {       Bitset rlt = Bitset(len);       for (int i = 0; i < sz; i++) rlt.v[i] = v[i] ^ b.v[i];       return rlt;     }     vector<int> get() {       vector<int> rlt;       for (int i = 0; i < sz; i++)         if (v[i]) {           for (int j = 0; j < 32; j++)             if (v[i] & (1u << j)) rlt.push_back((i << 5) | j);         }       return rlt;     }     bool bit(int x) { return v[x >> 5] & (1u << (x & 31)); }   };   int n, s, a[70707], id[70707], in[70707];   bool vis[70707];   set<int> st[70707];   bool cmp(int i, int j) {     return a[i] != a[j] ? a[i] < a[j] : !vis[i] && vis[j];   }   int main() {     Bitset val = Bitset(70707), nwb = Bitset(70707), tmp = Bitset(70707);     scanf( %d %d , &n, &s);     int I = 0;     for (int i = 1; i <= n; i++) {       scanf( %d , &a[i]);       if (a[i] > s) return puts( -1 ), 0;       if (a[i] > a[I]) I = i;     }     vis[I] = 1;     s -= a[I];     val.v[0] = 1;     for (int i = 1; i <= n && s; i++)       if (!vis[i] && a[i] <= s) {         tmp = val;         tmp <<= a[i];         nwb = val ^ (val | tmp);         val = val | tmp;         vector<int> v = nwb.get();         for (int j = 0; j < v.size(); j++) {           if (v[j] <= s) st[i].insert(v[j]);         }       }     if (!val.bit(s)) return puts( -1 ), 0;     for (int i = n; i >= 1; i--) {       if (st[i].find(s) != st[i].end()) {         s -= a[i];         vis[i] = 1;       }     }     for (int i = 1; i <= n; i++) id[i] = i;     sort(id + 1, id + n + 1, cmp);     for (int i = 1; i <= n; i++) {       if (!vis[id[i]]) {         in[id[i + 1]] = id[i];       }     }     for (int i = 1; i <= n; i++) {       printf( %d  , a[i] - a[in[i]]);       if (in[i])         printf( 1 %d n , in[i]);       else         puts( 0 );     }     return 0;   }   