func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 1e5 + 5;   char s[N];   int a[N], b[N], n;   int f[N][2][2];   pair<int, int> g1[N][2][2], g2[N][2][2];   void solve() {     for (int l = 0, r = n + 1; l <= r; l++, r--) {       if (l + 1 == r || l == r) break;       int i = l;       for (int j = 0; j < 2; j++) {         for (int k = 0; k < 2; k++) {           if (!f[i][j][k]) continue;           for (int x = 0; x < 10; x++) {             int y = (a[l + 1] - x - k + 10) % 10;             if (r - 1 == n && y == 0) continue;             for (int j2 = 0; j2 < 2; j2++) {               if (j && (x + y + j2) < 10) continue;               if (!j && (x + y + j2) >= 10) continue;               if (a[r - 1] != (x + y + j2) % 10) continue;               int k2 = (x + y + k) >= 10 ? 1 : 0;               if (l + 2 < r - 1) {                 f[i + 1][j2][k2] = 1;                 g1[i + 1][j2][k2] = {x, y};                 g2[i + 1][j2][k2] = {j, k};               } else if (l + 2 == r - 1) {                 if (j2 == k2) {                   f[i + 1][j2][k2] = 1;                   g1[i + 1][j2][k2] = {x, y};                   g2[i + 1][j2][k2] = {j, k};                 }               } else if (l + 1 == r - 1) {                 if (j == k2 && j2 == k && x == y) {                   f[i + 1][j2][k2] = 1;                   g1[i + 1][j2][k2] = {x, y};                   g2[i + 1][j2][k2] = {j, k};                 }               }             }           }         }       }     }     int x = (n + 1) / 2, j, k;     for (int _ = 0; _ < 2; _++)       for (int __ = 0; __ < 2; __++)         if (f[x][_][__]) j = _, k = __;     if (!f[x][j][k]) return;     for (int l = x, r = x + (n % 2 == 0 ? 1 : 0); l >= 1; l--, r++) {       int i = l;       b[l] = g1[i][j][k].first, b[r] = g1[i][j][k].second;       int _ = g2[i][j][k].first, __ = g2[i][j][k].second;       j = _, k = __;     }     for (int i = n; i >= 1; i--) cout << b[i];     cout << endl;     exit(0);   }   int main() {     ios::sync_with_stdio(false);     cin.tie(0);     cin >> (s + 1);     n = strlen(s + 1);     reverse(s + 1, s + n + 1);     for (int i = 1; i <= n; i++) a[i] = s[i] -  0 ;     f[0][0][0] = 1;     solve();     if (a[n] == 1 && n > 1) {       memset(f, 0, sizeof(f));       memset(g1, 0, sizeof(g1));       memset(g2, 0, sizeof(g2));       f[0][1][0] = 1;       --n;       solve();     }     cout << 0 << endl;     return 0;   }   