func_code_string: #include <bits/stdc++.h>   using namespace std;   using ll = long long;   using ii = pair<int, int>;   using i3 = pair<int, ii>;   using li = pair<ll, int>;   using lii = pair<ll, ii>;   using vi = vector<int>;   using vl = vector<ll>;   using vli = vector<li>;   using vii = vector<ii>;   using vi3 = vector<i3>;   using vlii = vector<lii>;   const int N = 1e5 + 5;   const int INF = 1e9 + 7;   const double eps = 1e-12, PI = acos(-1);   int n, m;   char s[N];   int mem[N][5];   int dp(int i, int rem) {     if (i == n) {       return rem == 0 ? 0 : INF;     }     int &ret = mem[i][rem];     if (ret != -1) return ret;     return ret = min(1 + dp(i + 1, rem),                      dp(i + 1, (rem * 10 + int(s[i] -  0 )) % 3));   }   vi ans;   void path(int i, int rem) {     if (i == n) return;     if (dp(i + 1, (rem * 10 + int(s[i] -  0 )) % 3) == dp(i, rem)) {       ans.push_back(s[i] -  0 );       path(i + 1, (rem * 10 + int(s[i] -  0 )) % 3);       return;     }     path(i + 1, rem);   }   void solve(int cs) {     scanf( %s , s);     n = strlen(s);     int mn = INF, idx = INF;     bool isZero = 0;     memset(mem, -1, sizeof mem);     for (int i = 0; s[i]; i++) {       if (s[i] ==  0 ) {         isZero = 1;         continue;       }       int curr = dp(i + 1, int(s[i] -  0 ) % 3) + i;       if (curr < mn) {         mn = curr;         idx = i;       }     }     if (idx == INF) {       printf( %d n , isZero ? 0 : -1);       return;     }     path(idx + 1, int(s[idx] -  0 ) % 3);     printf( %c , s[idx]);     for (int A : ans) printf( %d , A);     printf(  n );   }   int main() {     int t = 1;     for (int cs = 1; t--; cs++) {       solve(cs);     }     return 0;   }   