#include <bits/stdc++.h>
using namespace std;
const int N = 3e5 + 10;
int mx[4 * N], ind[4 * N], lazy[4 * N], n, L, R, cnt;
int hi[N], low[N], v[N];
vector<int> qa[N], qd[N];
void build(int s = 0, int e = N, int id = 1) {
  ind[id] = s;
  mx[id] = 0;
  if (e - s == 1) return;
  int mid = (s + e) / 2;
  build(s, mid, 2 * id);
  build(mid, e, 2 * id + 1);
}
void shift(int id) {
  mx[2 * id] += lazy[id];
  mx[2 * id + 1] += lazy[id];
  lazy[2 * id] += lazy[id];
  lazy[2 * id + 1] += lazy[id];
  lazy[id] = 0;
}
void add(int l, int r, int val, int s = 0, int e = N, int id = 1) {
  if (e <= l || r <= s) return;
  if (l <= s && e <= r) {
    mx[id] += val;
    lazy[id] += val;
    return;
  }
  shift(id);
  int mid = (s + e) / 2;
  add(l, r, val, s, mid, 2 * id);
  add(l, r, val, mid, e, 2 * id + 1);
  if (mx[2 * id] >= mx[2 * id + 1]) {
    mx[id] = mx[2 * id];
    ind[id] = ind[2 * id];
  } else {
    mx[id] = mx[2 * id + 1];
    ind[id] = ind[2 * id + 1];
  }
}
pair<int, int> get(int l, int r, int s = 0, int e = N, int id = 1) {
  if (e <= l || r <= s) return {-1, -1};
  if (l <= s && e <= r) return {mx[id], ind[id]};
  shift(id);
  int mid = (s + e) / 2;
  pair<int, int> left = get(l, r, s, mid, 2 * id),
                 right = get(l, r, mid, e, 2 * id + 1);
  if (left.first >= right.first)
    return left;
  else
    return right;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> low[i] >> v[i] >> hi[i];
    qa[low[i]].push_back(i);
    qd[v[i]].push_back(i);
  }
  build();
  for (int i = 0; i < N; i++) {
    for (auto j : qa[i]) add(v[j], hi[j] + 1, 1);
    pair<int, int> cur = get(i, N);
    if (cnt <= cur.first) {
      cnt = cur.first;
      L = i;
      R = cur.second;
    }
    for (auto j : qd[i]) add(v[j], hi[j] + 1, -1);
  }
  cout << cnt << "\n";
  for (int i = 0; i < n; i++)
    if (low[i] <= L && hi[i] >= R && v[i] <= R && v[i] >= L)
      cout << i + 1 << " ";
  cout << "\n";
  return 0;
}
