#include <bits/stdc++.h>
using namespace std;
template <class T>
inline T sqr(T x) {
  return x * x;
}
const double EPS = 1e-6;
const int INF = 0x3fffffff;
const long long LINF = INF * 1ll * INF;
const double PI = acos(-1.0);
using namespace std;
struct SegMent {
  int l, r, v;
} s[300005];
int mx[300005 << 2];
int pos[300005 << 2];
int add[300005 << 2];
vector<int> v[300005], v1[300005];
class SegTree {
 public:
  int val, ql, qr;
  SegTree(int n) { build(1, n, 1); }
  void build(int l, int r, int rt) {
    if (l == r)
      mx[rt] = 0, pos[rt] = l;
    else {
      int mid = (l + r) >> 1;
      build(l, mid, rt << 1);
      build(mid + 1, r, rt << 1 | 1);
      pos[rt] = pos[rt << 1];
      mx[rt] = 0;
    }
  }
  void update(int l, int r, int rt) {
    if (ql <= l && r <= qr) {
      mx[rt] += val;
      add[rt] += val;
    } else {
      int mid = (l + r) >> 1;
      push_Down(l, r, rt);
      if (ql <= mid) update(l, mid, rt << 1);
      if (mid < qr) update(mid + 1, r, rt << 1 | 1);
      if (mx[rt << 1] < mx[rt << 1 | 1]) {
        mx[rt] = mx[rt << 1 | 1];
        pos[rt] = pos[rt << 1 | 1];
      } else {
        mx[rt] = mx[rt << 1];
        pos[rt] = pos[rt << 1];
      }
    }
  }
  void push_Down(int l, int r, int rt) {
    if (add[rt]) {
      mx[rt << 1 | 1] += add[rt];
      mx[rt << 1] += add[rt];
      add[rt << 1] += add[rt];
      add[rt << 1 | 1] += add[rt];
      add[rt] = 0;
    }
  }
  pair<int, int> query(int l, int r, int rt) {
    if (ql <= l && r <= qr)
      return make_pair(mx[rt], pos[rt]);
    else {
      int mid = (l + r) >> 1;
      push_Down(l, r, rt);
      pair<int, int> ans = make_pair(-1, -1);
      if (ql <= mid) {
        pair<int, int> tmp = query(l, mid, rt << 1);
        ans = max(ans, tmp);
      }
      if (mid < qr) {
        ans = max(ans, query(mid + 1, r, rt << 1 | 1));
      }
      return ans;
    }
  }
};
int main(void) {
  int n;
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    scanf("%d %d %d", &s[i].l, &s[i].v, &s[i].r);
    v[s[i].l].push_back(i);
    v1[s[i].v].push_back(i);
  }
  SegTree seg(300005);
  int ans = 0;
  int resl, resr;
  for (int i = 1; i < 300005; i++) {
    int sz = v[i].size();
    for (int j = 0; j < sz; j++) {
      int pos = v[i][j];
      seg.ql = s[pos].v;
      seg.qr = s[pos].r;
      seg.val = 1;
      seg.update(1, 300005, 1);
    }
    seg.ql = i, seg.qr = 300005;
    pair<int, int> ret = seg.query(1, 300005, 1);
    if (ret.first > ans) {
      ans = ret.first;
      resl = i, resr = ret.second;
    }
    sz = v1[i].size();
    for (int j = 0; j < sz; j++) {
      int pos = v1[i][j];
      seg.ql = i, seg.qr = s[pos].r;
      seg.val = -1;
      seg.update(1, 300005, 1);
    }
  }
  printf("%d\n", ans);
  for (int i = 0; i < n; i++) {
    if (s[i].l <= resl && resl <= s[i].v && s[i].v <= resr && resr <= s[i].r)
      printf("%d ", i + 1);
  }
  puts("");
}
