#include <bits/stdc++.h>
using namespace std;
struct debugger {
  template <typename T>
  debugger& operator,(const T& v) {
    cerr << v << " ";
    return *this;
  }
} dbg;
struct PT {
  int i, j, k;
  PT(int x, int y, int z) : i(x), j(y), k(z) {}
  PT() {}
};
bool dp[50010][2][2];
char soll[50010][2][2], solr[50010][2][2];
PT pred[50010][2][2];
string n;
int N;
int main() {
  cin >> n;
  N = n.size();
  reverse(n.begin(), n.end());
  for (int k = n.size(); k >= max((int)n.size() - 1, 1); k--) {
    fill(dp[0][0], dp[50010][0], 0);
    for (int i = (k - 1) / 2; i >= 0; i--)
      for (int c = 0; c < 2; c++)
        for (int d = 0; d < 2; d++) {
          if (i == (k - 1) / 2) {
            if (k % 2) {
              int targ = 10 * c + n[i] - '0' - d;
              for (int sum = 0; sum < 19; sum += 2)
                if (sum == targ) {
                  dp[i][c][d] = true;
                  soll[i][c][d] = sum / 2;
                  solr[i][c][d] = -1;
                }
            } else {
              int targ = n[i] - '0' + 10 * (n[i + 1] - '0') + 100 * c - d;
              for (int sum = 0; sum < 19; sum++)
                if (10 * sum + sum == targ) {
                  dp[i][c][d] = true;
                  soll[i][c][d] = (sum + 1) / 2;
                  solr[i][c][d] = sum / 2;
                }
            }
            pred[i][c][d] = PT(-1, 0, 0);
          } else {
            for (int x = 0; x < 2; x++)
              for (int y = 0; y < 2; y++) {
                int lt = 10 * y - d + n[i] - '0';
                int ut = 10 * c - x + n[k - 1 - i] - '0';
                for (int sum = 0; sum < 19; sum++)
                  if (sum == lt && sum == ut && dp[i + 1][x][y]) {
                    dp[i][c][d] = true;
                    soll[i][c][d] = (sum + 1) / 2;
                    solr[i][c][d] = sum / 2;
                    pred[i][c][d] = PT(i + 1, x, y);
                  }
              }
          }
        }
    if ((dp[0][0][0] && N == k) || (dp[0][1][0] && N != k)) {
      vector<int> a, b;
      for (int x = 0, y = N != k, z = 0; 1;) {
        a.push_back(soll[x][y][z]);
        b.push_back(solr[x][y][z]);
        if (x == (k - 1) / 2) break;
        int ny = pred[x][y][z].j;
        int nz = pred[x][y][z].k;
        x++;
        y = ny;
        z = nz;
      }
      if (a[0] == 0) continue;
      reverse(b.begin(), b.end());
      for (int c = 0; c < a.size(); c++)
        if (a[c] != -1) printf("%c", a[c] + '0');
      for (int c = 0; c < b.size(); c++)
        if (b[c] != -1) printf("%d", b[c]);
      cout << endl;
      return 0;
    }
  }
  cout << 0 << endl;
  return 0;
}
