#include <bits/stdc++.h>
using namespace std;
std::mt19937 rnd(
    (int)std::chrono::steady_clock::now().time_since_epoch().count());
long long gcd(long long a, long long b) { return b == 0 ? a : gcd(b, a % b); }
const int MAXN = 250000;
struct P {
  int x, y;
  P() {}
  P(int x, int y) : x(x), y(y) {}
};
bool operator<(const P& a, const P& b) {
  if (a.x != b.x) return a.x < b.x;
  return a.y < b.y;
}
int ninit;
P pinit[MAXN];
set<P> infected;
vector<P> getadj(const P& a) {
  vector<P> ret(3);
  ret[0] = P(a.x + 1, a.y);
  ret[1] = P(a.x - 1, a.y);
  ret[2] = a.x & 1 ? P(a.x - 1, a.y + 1) : P(a.x + 1, a.y - 1);
  return ret;
}
int ntree;
vector<P> ptree;
map<P, int> pmap;
vector<vector<int>> adj;
vector<int> col;
vector<int> par;
bool dfscycle(int at) {
  for (int i = (0); i < (((int)(adj[at]).size())); ++i) {
    int to = adj[at][i];
    if (to == par[at]) continue;
    if (par[to] != -2) return true;
    par[to] = at;
    if (dfscycle(to)) return true;
  }
  return false;
}
bool hascycle() {
  par = vector<int>(ntree, -2);
  for (int i = (0); i < (ntree); ++i)
    if (par[i] == -2) {
      par[i] = -1;
      if (dfscycle(i)) return true;
    }
  return false;
}
void determineinfected() {
  infected.clear();
  queue<P> q;
  for (int i = (0); i < (ninit); ++i)
    infected.insert(pinit[i]), q.push(pinit[i]);
  while (!q.empty()) {
    P a = q.front();
    q.pop();
    for (const P& b : getadj(a)) {
      if (infected.count(b)) continue;
      int cntadjinfected = 0;
      for (const P& c : getadj(b)) cntadjinfected += infected.count(c);
      if (cntadjinfected >= 2) infected.insert(b), q.push(b);
    }
  }
}
void buildgraph() {
  ptree = vector<P>(((int)(infected).size()));
  ntree = 0;
  pmap.clear();
  for (const P& a : infected) pmap[a] = ntree, ptree[ntree] = a, ++ntree;
  adj = vector<vector<int>>(ntree);
  col = vector<int>(ntree, 0);
  for (int i = (0); i < (ntree); ++i)
    for (const P& b : getadj(ptree[i]))
      if (pmap.count(b)) adj[i].push_back(pmap[b]);
  for (int i = (0); i < (ninit); ++i)
    if (pmap.count(pinit[i])) col[pmap[pinit[i]]] = 1;
}
int calcsteps() {
  set<int> cheap;
  set<int> expansive;
  vector<bool> alive(ntree, true);
  vector<int> cntadjalive(ntree, 0);
  vector<int> cntadjblack(ntree, 0);
  for (int at = (0); at < (ntree); ++at)
    cntadjalive[at] = ((int)(adj[at]).size());
  for (int at = (0); at < (ntree); ++at)
    for (int to : adj[at]) cntadjblack[at] += col[to];
  auto upd = [&](int at) {
    cheap.erase(at);
    expansive.erase(at);
    if (!alive[at]) return;
    if (col[at] == 0) {
      if (cntadjblack[at] == 2) cheap.insert(at);
      if (cntadjblack[at] == 3) expansive.insert(at);
    } else {
      if (cntadjblack[at] == 1 && cntadjalive[at] == 1) cheap.insert(at);
      if (cntadjblack[at] == 0 && cntadjalive[at] == 0) expansive.insert(at);
    }
  };
  for (int at = (0); at < (ntree); ++at) upd(at);
  int ret = 0;
  while (true) {
    if (!cheap.empty()) {
      int at = *cheap.begin();
      if (col[at] == 0) {
        assert(cntadjblack[at] == 2);
        col[at] = 1, ++ret;
        for (int& to : adj[at]) ++cntadjblack[to];
        upd(at);
        for (int& to : adj[at]) upd(to);
      } else {
        assert(cntadjblack[at] == 1 && cntadjalive[at] == 1);
        int oth = -1;
        for (int& to : adj[at])
          if (alive[to]) {
            assert(oth == -1);
            oth = to;
          }
        assert(oth != -1 && col[oth] == 1);
        if (cntadjalive[oth] == 2 && cntadjblack[oth] == 1) {
          int w = -1;
          for (int& to : adj[oth])
            if (alive[to] && to != at) {
              assert(w == -1);
              w = to;
            }
          assert(w != -1 && col[w] == 0);
          if (cntadjblack[w] == 3) {
            col[oth] = 0, ++ret;
            col[w] = 1, ++ret;
            col[oth] = 1, ++ret;
            for (int& to : adj[w]) ++cntadjblack[to];
            upd(at);
            upd(w);
            for (int& to : adj[w]) upd(to);
            continue;
          }
        }
        col[at] = 0, alive[at] = false, ++ret;
        for (int& to : adj[at]) --cntadjblack[to], --cntadjalive[to];
        upd(at);
        for (int& to : adj[at]) upd(to);
      }
    } else if (!expansive.empty()) {
      int at = *expansive.begin();
      if (col[at] == 0) {
        assert(cntadjblack[at] == 3 && cntadjalive[at] == 3);
        bool done = false;
        for (int& oth : adj[at]) {
          if (cntadjblack[oth] != 1) continue;
          done = true;
          col[oth] = 0, ++ret;
          col[at] = 1, ++ret;
          col[oth] = 1, ++ret;
          for (int& to : adj[at]) ++cntadjblack[to];
          upd(at);
          for (int& to : adj[at]) upd(to);
          break;
        }
        if (done) continue;
        col[at] = 1, ++ret;
        for (int& to : adj[at]) ++cntadjblack[to];
        upd(at);
        for (int& to : adj[at]) upd(to);
      } else {
        assert(cntadjblack[at] == 0 && cntadjalive[at] == 0);
        col[at] = 0, alive[at] = false, ++ret;
        for (int& to : adj[at]) --cntadjblack[to], --cntadjalive[to];
        upd(at);
        for (int& to : adj[at]) upd(to);
      }
    } else {
      break;
    }
  }
  for (int at = (0); at < (ntree); ++at) assert(!alive[at] && col[at] == 0);
  return ret;
}
int solve() {
  determineinfected();
  buildgraph();
  if (hascycle()) return -1;
  return calcsteps();
}
void run() {
  scanf("%d", &ninit);
  for (int i = (0); i < (ninit); ++i) scanf("%d%d", &pinit[i].x, &pinit[i].y);
  int ans = solve();
  if (ans == -1)
    printf("SICK\n");
  else
    printf("RECOVERED\n%d\n", ans);
}
void stress() {
  std::mt19937 rnd(123);
  for (int rep = (0); rep < (1000000); ++rep) {
    ninit = rnd() % 20 + 1;
    int minsz = 1;
    while (minsz * minsz < ninit) ++minsz;
    int sz = minsz + rnd() % (minsz + 1);
    set<P> seen;
    for (int i = (0); i < (ninit); ++i)
      while (true) {
        P p;
        p.x = rnd() % sz, p.y = rnd() % sz;
        if (seen.count(p)) continue;
        seen.insert(p);
        pinit[i] = p;
        break;
      }
    solve();
    if (rep % 1000 == 999) printf(".");
  }
}
int main() {
  run();
  return 0;
}
