#include <bits/stdc++.h>
using namespace std;
int a[100005], b[100005], c[100005];
class segtree {
 public:
  int seg[524288 * 2];
  int lazy[524288 * 2];
  void init() {
    for (int i = 0; i < 524288 * 2; i++) {
      seg[i] = 0;
    }
  }
  void lazy_evaluate(int x) {
    if (x * 2 + 2 >= 524288 * 2) return;
    lazy[x * 2 + 1] += lazy[x];
    lazy[x * 2 + 2] += lazy[x];
    seg[x * 2 + 1] += lazy[x];
    seg[x * 2 + 2] += lazy[x];
    lazy[x] = 0;
  }
  int update(int a, int b, int k, int lb, int ub, int val) {
    pair<int, int> p;
    p.first = -2000000000, p.second = -2000000000;
    if (ub < a || b < lb) return seg[k];
    if (a <= lb && ub <= b) {
      lazy[k] += val;
      seg[k] += val;
      return seg[k];
    }
    if (lazy[k]) lazy_evaluate(k);
    int p1 = update(a, b, k * 2 + 1, lb, (lb + ub) / 2, val);
    int p2 = update(a, b, k * 2 + 2, (lb + ub) / 2 + 1, ub, val);
    return seg[k] = max(p1, p2);
  }
  int query() { return seg[0]; }
} seg;
int main() {
  int n;
  vector<pair<int, pair<int, int> > > p;
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    scanf("%d %d %d", &a[i], &b[i], &c[i]);
    p.push_back(make_pair(a[i], make_pair(b[i], c[i])));
  }
  sort(p.begin(), p.end());
  seg.init();
  int ret = -1;
  int lb, ub;
  priority_queue<pair<int, int>, vector<pair<int, int> >,
                 greater<pair<int, int> > >
      que;
  for (int i = 0; i < n; i++) {
    while (!que.empty() && p[i].first > que.top().first) {
      seg.update(p[que.top().second].second.first,
                 p[que.top().second].second.second, 0, 0, 524288 - 1, -1);
      que.pop();
    }
    que.push(make_pair(p[i].second.first, i));
    seg.update(p[i].second.first, p[i].second.second, 0, 0, 524288 - 1, 1);
    int pp = seg.query();
    if (pp > ret) {
      ret = pp;
      lb = p[i].first;
    }
  }
  printf("%d\n", ret);
  priority_queue<int, vector<int>, greater<int> > que2;
  int next;
  vector<pair<int, int> > in;
  for (int i = 0; i < n; i++) {
    if (p[i].second.first >= lb && p[i].first <= lb) {
      in.push_back(make_pair(p[i].second.first, i));
    }
  }
  sort(in.begin(), in.end());
  next = 0;
  for (int j = lb;; j++) {
    while (!que2.empty() && que2.top() < j) que2.pop();
    while (next != in.size() && in[next].first <= j) {
      que2.push(p[in[next].second].second.second);
      next++;
    }
    if (que2.size() == ret) {
      ub = j;
      break;
    }
  }
  int x = 0;
  for (int i = 0; i < n; i++) {
    if (a[i] <= lb && ub <= c[i] && lb <= b[i] && b[i] <= ub) {
      x++;
      printf("%d%c", i + 1, x == ret ? '\n' : ' ');
    }
  }
}
