#include <bits/stdc++.h>
using namespace std;
ifstream fin("in.in");
ofstream fout("out.out");
const int N = 3e5 + 10;
int n, m, res[3];
pair<pair<long long, int>, int> node[N << 3];
vector<int> yy;
struct person {
  int l, v, r;
} a[N];
struct line {
  int x, yb, yt, val;
  bool operator<(const line &snd) const {
    return make_pair(x, -val) < make_pair(snd.x, -snd.val);
  }
} l[N << 1];
void buildTree(int s, int e, int id) {
  node[id].first.first = s;
  if (s + 1 == e) return;
  int mid = (s + e) >> 1;
  buildTree(s, mid, id * 2 + 0);
  buildTree(mid, e, id * 2 + 1);
}
inline void propagate(int id) {
  for (int child = 2 * id; child < 2 * (id + 1); child++) {
    node[child].first.second += node[id].second;
    node[child].second += node[id].second;
  }
  node[id].second = 0;
}
void modify(int s, int e, int id, int l, int r, int val) {
  if (s >= r || e <= l) return;
  if (s >= l && e <= r) {
    node[id].first.second += val;
    node[id].second += val;
    return;
  }
  int mid = (s + e) >> 1;
  propagate(id);
  modify(s, mid, id * 2 + 0, l, r, val);
  modify(mid, e, id * 2 + 1, l, r, val);
  int Max = (node[id * 2 + 0].first.second > node[id * 2 + 1].first.second)
                ? id * 2 + 0
                : id * 2 + 1;
  node[id].first.second = node[Max].first.second;
  node[id].first.first = node[Max].first.first;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> a[i].l >> a[i].v >> a[i].r;
    yy.push_back(a[i].l);
    yy.push_back(a[i].v);
    l[2 * i + 0].x = a[i].v, l[2 * i + 0].val = 1;
    l[2 * i + 0].yb = a[i].l, l[2 * i + 0].yt = a[i].v;
    l[2 * i + 1].x = a[i].r, l[2 * i + 1].val = -1;
    l[2 * i + 1].yb = a[i].l, l[2 * i + 1].yt = a[i].v;
  }
  n <<= 1;
  sort(l, l + n);
  sort(yy.begin(), yy.end());
  yy.resize(unique(yy.begin(), yy.end()) - yy.begin());
  m = yy.size();
  buildTree(0, m, 1);
  int i = 0;
  while (i < n) {
    int base = i;
    for (; i < n && l[i].x == l[base].x && l[i].val == 1; i++)
      modify(0, m, 1, (lower_bound(yy.begin(), yy.end(), l[i].yb) - yy.begin()),
             (lower_bound(yy.begin(), yy.end(), l[i].yt) - yy.begin()) + 1,
             l[i].val);
    if (res[0] < node[1].first.second) {
      res[0] = node[1].first.second;
      res[1] = node[1].first.first;
      res[2] = l[i - 1].x;
    }
    for (; i < n && l[i].x == l[base].x && l[i].val == -1; i++)
      modify(0, m, 1, (lower_bound(yy.begin(), yy.end(), l[i].yb) - yy.begin()),
             (lower_bound(yy.begin(), yy.end(), l[i].yt) - yy.begin()) + 1,
             l[i].val);
  }
  int x = res[2];
  int y = yy[res[1]];
  cout << res[0] << endl;
  n >>= 1;
  for (int i = 0; i < n; i++)
    if (a[i].v <= x && x <= a[i].r && a[i].l <= y && y <= a[i].v)
      cout << i + 1 << ' ';
  return 0;
}
