#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5, SQRT = 320, LOGN = 20, MOD = 1e9 + 7;
int dp[N][2][2], ans[N], len;
pair<int, int> val[N][2][2], nxt[N][2][2];
string a;
bool solve(int l, int r, bool ten_dig, bool carry) {
  if (l > r) return true;
  bool ok = false;
  if (dp[l][ten_dig][carry] != -1) return dp[l][ten_dig][carry];
  for (int i = 0; i < 10; i++) {
    if (i == 0 and r == len - 1) continue;
    for (int j = 0; j < 10; j++) {
      if (l == r and i != j) continue;
      if ((i + j + carry) % 10 != a[r] - '0') continue;
      if (r - l == 1) {
        int tot = i + j + (i + j + carry) / 10;
        if (tot / 10 == ten_dig and (tot % 10) == a[l] - '0') {
          val[l][ten_dig][carry] = {j, i};
          return true;
        }
        continue;
      }
      if ((i + j) / 10 == ten_dig and (i + j) % 10 == a[l] - '0') {
        if (solve(l + 1, r - 1, 0, (i + j + carry) / 10)) {
          val[l][ten_dig][carry] = {j, i};
          nxt[l][ten_dig][carry] = {0, (i + j + carry) / 10};
          ok = true;
        }
      }
      if ((i + j + 1) / 10 == ten_dig and (i + j + 1) % 10 == a[l] - '0') {
        if (solve(l + 1, r - 1, 1, (i + j + carry) / 10)) {
          val[l][ten_dig][carry] = {j, i};
          nxt[l][ten_dig][carry] = {1, (i + j + carry) / 10};
          ok = true;
        }
      }
    }
  }
  return (dp[l][ten_dig][carry] = ok);
}
int main() {
  cin >> a;
  len = a.length();
  int tmp_b, tmp_c;
  if (len == 1 and a[0] == '1') {
    cout << 0 << endl;
    exit(0);
  }
  memset(dp, -1, sizeof(dp));
  memset(nxt, 0, sizeof(nxt));
  memset(val, -1, sizeof(val));
  if (solve(0, len - 1, 0, 0)) {
    int a = 0, b = 0, c = 0;
    while (1) {
      ans[a] = val[a][b][c].first, ans[len - a - 1] = val[a][b][c].second;
      tmp_b = nxt[a][b][c].first, tmp_c = nxt[a][b][c].second;
      a++, b = tmp_b, c = tmp_c;
      if (val[a][b][c].first == -1) break;
    }
    for (int i = len - 1; i >= 0; i--) cout << ans[i];
    cout << endl;
    exit(0);
  }
  if (a[0] == '1') {
    memset(dp, -1, sizeof(dp));
    memset(nxt, 0, sizeof(nxt));
    memset(val, -1, sizeof(val));
    if (solve(1, len - 1, 1, 0)) {
      int a = 1, b = 1, c = 0;
      while (1) {
        ans[a] = val[a][b][c].first, ans[len - a] = val[a][b][c].second;
        tmp_b = nxt[a][b][c].first, tmp_c = nxt[a][b][c].second;
        a++, b = tmp_b, c = tmp_c;
        if (val[a][b][c].first == -1) break;
      }
      for (int i = len - 1; i >= 1; i--) cout << ans[i];
      cout << endl;
      exit(0);
    }
  }
  cout << 0 << endl;
}
