#include <bits/stdc++.h>
using namespace std;
int pos[131072][2][2];
char txt[131072];
char ans[131072];
int mem[131072][2][2][4];
int n;
void recall(int x, int c1, int c2) {
  int y = n - x - 1;
  if (x == y) {
    ans[x] = mem[x][c1][c2][0] + '0';
    return;
  }
  if (x + 1 == y) {
    ans[x] = mem[x][c1][c2][0] + '0';
    ans[y] = mem[x][c1][c2][1] + '0';
    return;
  }
  ans[x] = mem[x][c1][c2][0] + '0';
  ans[y] = mem[x][c1][c2][1] + '0';
  recall(x + 1, mem[x][c1][c2][2], mem[x][c1][c2][3]);
}
int doit(int x, int c1, int c2) {
  int& ret = pos[x][c1][c2];
  if (ret != -1) return ret;
  ret = 0;
  int y = n - x - 1;
  if (x == y) {
    for (int d = 0; d <= 9; ++d) {
      if (x == 0 && d == 0) continue;
      if ((d + d + c2) % 10 == txt[x] - '0' && (d + d + c2) / 10 == c1) {
        mem[x][c1][c2][0] = d;
        return (ret = 1);
      }
    }
    return (ret = 0);
  }
  if (x + 1 == y) {
    for (int dx = 0; dx <= 9; ++dx) {
      if (dx == 0 && x == 0) continue;
      for (int dy = 0; dy <= 9; ++dy) {
        if ((dx + dy + c2) % 10 == txt[y] - '0' &&
            (dx + dy + (dx + dy + c2) / 10) % 10 == txt[x] - '0' &&
            (dx + dy + (dx + dy + c2) / 10) / 10 == c1) {
          mem[x][c1][c2][0] = dx;
          mem[x][c1][c2][1] = dy;
          return (ret = 1);
        }
      }
    }
    return (ret = 0);
  }
  for (int dx = 0; dx <= 9; ++dx) {
    if (dx == 0 && x == 0) continue;
    for (int dy = 0; dy <= 9; ++dy) {
      for (int d1 = 0; d1 <= 1; ++d1) {
        for (int d2 = 0; d2 <= 1; ++d2) {
          int v = doit(x + 1, d1, d2);
          if (v == 0) continue;
          if ((dx + dy + d1) % 10 == txt[x] - '0' &&
              (dx + dy + d1) / 10 == c1 &&
              (dx + dy + c2) % 10 == txt[y] - '0' &&
              (dx + dy + c2) / 10 == d2) {
            mem[x][c1][c2][0] = dx;
            mem[x][c1][c2][1] = dy;
            mem[x][c1][c2][2] = d1;
            mem[x][c1][c2][3] = d2;
            return (ret = 1);
          }
        }
      }
    }
  }
  return ret;
}
void pre() {
  char buff[16];
  char num[16];
  memset(num, 0, sizeof(num));
  for (int i = 1; i <= 100; ++i) {
    sprintf(buff, "%d", i);
    for (int j = 0; j < strlen(buff); ++j) {
      num[j] = buff[j] - '0' + buff[strlen(buff) - 1 - j] - '0';
    }
    for (int j = strlen(buff) - 1; j >= 0; --j) {
      if (j && num[j] >= 10) num[j] -= 10, num[j - 1]++;
    }
    if (num[0] >= 10) {
      num[0] -= 10;
      cout << "1";
    }
    for (int j = 0; j < strlen(buff); ++j) cout << char(num[j] + '0');
    cout << endl;
  }
}
int main() {
  memset(pos, -1, sizeof(pos));
  cin >> txt;
  n = strlen(txt);
  int v = doit(0, 0, 0);
  if (v) {
    recall(0, 0, 0);
    ans[n] = 0;
    cout << ans << endl;
    return 0;
  }
  if (txt[0] == '1' && n > 1) {
    for (int i = 0; i < n - 1; ++i) {
      txt[i] = txt[i + 1];
    }
    n--;
    txt[n] = 0;
    memset(pos, -1, sizeof(pos));
    v = doit(0, 1, 0);
    if (v) {
      recall(0, 1, 0);
      ans[n] = 0;
      cout << ans << endl;
      return 0;
    }
  }
  cout << "0" << endl;
  return 0;
}
