#include <bits/stdc++.h>
using namespace std;
string ans;
bool check(const string& s) {
  int res = 0;
  for (auto i : s) {
    res += i - '0';
  }
  return !(res % 3);
}
int main() {
  string s;
  cin >> s;
  int sum = 0;
  bool haso = false;
  for (int i = 0; i < s.length(); i++) {
    sum += s[i] - '0';
    if (s[i] == '0') haso = true;
  }
  int n = s.length();
  int m = n;
  if (sum % 3 == 0) {
    cout << s << endl;
    return 0;
  } else if (sum % 3 == 1) {
    deque<char> t;
    int cur = s.length() - 1;
    for (; cur >= 0; cur--) {
      if ((s[cur] - '0') % 3 == 1) {
        cur--;
        break;
      }
      t.push_front(s[cur]);
    }
    for (; cur >= 0; cur--) t.push_front(s[cur]);
    bool flag = true;
    string ss;
    while (!t.empty()) {
      if (t.front() != '0') flag = false;
      if (flag) {
        t.pop_front();
        continue;
      }
      ss.push_back(t.front());
      t.pop_front();
    }
    if (n - ss.length() < m && check(ss)) {
      ans = ss;
      m = n - ss.length();
    }
    int cnt = 0;
    cur = s.length() - 1;
    for (; cur >= 0; cur--) {
      if (cnt < 2 && (s[cur] - '0') % 3 == 2) {
        if (++cnt == 2) {
          cur--;
          break;
        }
        continue;
      }
      t.push_front(s[cur]);
    }
    for (; cur >= 0; cur--) t.push_front(s[cur]);
    flag = true;
    ss.clear();
    while (!t.empty()) {
      if (t.front() != '0') flag = false;
      if (flag) {
        t.pop_front();
        continue;
      }
      ss.push_back(t.front());
      t.pop_front();
    }
    if (n - ss.length() < m && check(ss)) {
      ans = ss;
      m = n - ss.length();
    }
  } else if (sum % 3 == 2) {
    deque<char> t;
    int cur = s.length() - 1;
    for (; cur >= 0; cur--) {
      if ((s[cur] - '0') % 3 == 2) {
        cur--;
        break;
      }
      t.push_front(s[cur]);
    }
    for (; cur >= 0; cur--) t.push_front(s[cur]);
    bool flag = true;
    string ss;
    while (!t.empty()) {
      if (t.front() != '0') flag = false;
      if (flag) {
        t.pop_front();
        continue;
      }
      ss.push_back(t.front());
      t.pop_front();
    }
    if (n - ss.length() < m && check(ss)) {
      ans = ss;
      m = n - ss.length();
    }
    int cnt = 0;
    cur = s.length() - 1;
    for (; cur >= 0; cur--) {
      if (cnt < 2 && (s[cur] - '0') % 3 == 1) {
        if (++cnt == 2) {
          cur--;
          break;
        }
        continue;
      }
      t.push_front(s[cur]);
    }
    for (; cur >= 0; cur--) t.push_front(s[cur]);
    flag = true;
    ss.clear();
    while (!t.empty()) {
      if (t.front() != '0') flag = false;
      if (flag) {
        t.pop_front();
        continue;
      }
      ss.push_back(t.front());
      t.pop_front();
    }
    if (n - ss.length() < m && check(ss)) {
      ans = ss;
      m = n - ss.length();
    }
  }
  if (ans.length() == 0) {
    if (haso)
      ans.push_back('0');
    else
      ans.push_back('-'), ans.push_back('1');
  }
  cout << ans << endl;
  return 0;
}
