#include <bits/stdc++.h>
using namespace std;
void read(vector<int> &d) {
  d.clear();
  for (char c(getchar()); isdigit(c); c = getchar()) d.push_back(c - '0');
  reverse(d.begin(), d.end());
}
void write(vector<int> d) {
  for (int i(d.size()); i; --i) printf("%d", d[i - 1]);
}
void write(int a) { printf("%i", a); }
void write(char c) { putchar(c); }
void write(const char *s) { printf(s); }
template <typename T1, typename... T2>
void write(const T1 &a, const T2 &...b) {
  write(a);
  write(b...);
}
bool operator==(const vector<int> &a, const vector<int> &b) {
  if (a.size() != b.size()) return false;
  for (int i(0); i < a.size(); ++i)
    if (a[i] != b[i]) return false;
  return true;
}
void nill_check(vector<int> &d) {
  while (d[d.size() - 1] == 0 && d.size() > 1) d.pop_back();
}
vector<int> operator+(const vector<int> &a, const vector<int> &b) {
  vector<int> res;
  int shift(0);
  for (int i(0); i < max(a.size(), b.size()); ++i) {
    int d((a.size() > i ? a[i] : 0) + (b.size() > i ? b[i] : 0) + shift);
    res.push_back(d % 10);
    shift = d / 10;
  }
  res.push_back(shift);
  nill_check(res);
  return res;
}
bool check(const vector<int> &need, const vector<int> &ans) {
  vector<int> rev(ans);
  reverse(rev.begin(), rev.end());
  nill_check(rev);
  return need == ans + rev;
}
int main() {
  vector<int> d;
  read(d);
  vector<int> t(d);
  if (d.back() == 1 && d.size() > 1) {
    vector<int> res(d.size() + 10, 0);
    int i(0), j(d.size() - 2), L(0), R(1);
    while (i <= j) {
      R = R * 10 + d[j];
      L += d[i];
      if (R > L + 9 || L < 0) {
        --d[i + 1];
        L += 10;
      }
      int D(min(L, R));
      if (D > 18) goto end;
      res[j] = D / 2 + D % 2;
      res[i] = D / 2;
      R -= D;
      if (R > 1) goto end;
      L -= D;
      if (L % 10) goto end;
      ++i, --j;
    }
    nill_check(res);
    if (check(t, res)) {
      write(res);
      return 0;
    }
  }
end:
  d = t;
  if (true) {
    vector<int> res(d.size() + 10, 0);
    int i(0), j(d.size() - 1), L(0), R(0);
    while (i <= j) {
      R = R * 10 + d[j];
      L += d[i];
      if (R > L + 9 || L < 0) {
        --d[i + 1];
        L += 10;
      }
      int D(min(L, R));
      if (D > 18) goto end2;
      res[j] = D / 2 + D % 2;
      res[i] = D / 2;
      R -= D;
      if (R > 1) goto end2;
      L -= D;
      if (L % 10) goto end2;
      ++i, --j;
    }
    nill_check(res);
    if (check(t, res)) {
      write(res);
      return 0;
    }
  }
end2:
  write(0);
}
