# 重み付き区間スケジューリング(最適解のジョブ集合)
n = int(input())
jobs = []
for i in range(1, n + 1):
s, f, v = map(int, input().split())
jobs.append((i, s, f, v)) # (元の番号, 開始, 終了, 価値)
# 終了時刻で安定ソート
jobs.sort(key=lambda x: x[2])
# q(i) の計算
q = [0] * (n + 1)
for i in range(1, n + 1):
si = jobs[i - 1][1]
qi = 0
for j in range(i - 1, 0, -1):
if jobs[j - 1][2] <= si:
qi = j
break
q[i] = qi
# OPT の計算
OPT = [0] * (n + 1)
for i in range(1, n + 1):
v = jobs[i - 1][3]
OPT[i] = max(OPT[i - 1], OPT[q[i]] + v)
# 最適解の復元
result = []
i = n
while i > 0:
v = jobs[i - 1][3]
if OPT[i] == OPT[q[i]] + v:
result.append(jobs[i - 1][0]) # 元のジョブ番号
i = q[i]
else:
i -= 1
# 出力(降順のまま)
print(result)
IyDph43jgb/ku5jjgY3ljLrplpPjgrnjgrHjgrjjg6Xjg7zjg6rjg7PjgrDvvIjmnIDpganop6Pjga7jgrjjg6fjg5bpm4blkIjvvIkKCm4gPSBpbnQoaW5wdXQoKSkKCmpvYnMgPSBbXQpmb3IgaSBpbiByYW5nZSgxLCBuICsgMSk6CiAgICBzLCBmLCB2ID0gbWFwKGludCwgaW5wdXQoKS5zcGxpdCgpKQogICAgam9icy5hcHBlbmQoKGksIHMsIGYsIHYpKSAgIyAo5YWD44Gu55Wq5Y+3LCDplovlp4ssIOe1guS6hiwg5L6h5YCkKQoKIyDntYLkuobmmYLliLvjgaflronlrprjgr3jg7zjg4gKam9icy5zb3J0KGtleT1sYW1iZGEgeDogeFsyXSkKCiMgcShpKSDjga7oqIjnrpcKcSA9IFswXSAqIChuICsgMSkKZm9yIGkgaW4gcmFuZ2UoMSwgbiArIDEpOgogICAgc2kgPSBqb2JzW2kgLSAxXVsxXQogICAgcWkgPSAwCiAgICBmb3IgaiBpbiByYW5nZShpIC0gMSwgMCwgLTEpOgogICAgICAgIGlmIGpvYnNbaiAtIDFdWzJdIDw9IHNpOgogICAgICAgICAgICBxaSA9IGoKICAgICAgICAgICAgYnJlYWsKICAgIHFbaV0gPSBxaQoKIyBPUFQg44Gu6KiI566XCk9QVCA9IFswXSAqIChuICsgMSkKZm9yIGkgaW4gcmFuZ2UoMSwgbiArIDEpOgogICAgdiA9IGpvYnNbaSAtIDFdWzNdCiAgICBPUFRbaV0gPSBtYXgoT1BUW2kgLSAxXSwgT1BUW3FbaV1dICsgdikKCiMg5pyA6YGp6Kej44Gu5b6p5YWDCnJlc3VsdCA9IFtdCmkgPSBuCndoaWxlIGkgPiAwOgogICAgdiA9IGpvYnNbaSAtIDFdWzNdCiAgICBpZiBPUFRbaV0gPT0gT1BUW3FbaV1dICsgdjoKICAgICAgICByZXN1bHQuYXBwZW5kKGpvYnNbaSAtIDFdWzBdKSAgIyDlhYPjga7jgrjjg6fjg5bnlarlj7cKICAgICAgICBpID0gcVtpXQogICAgZWxzZToKICAgICAgICBpIC09IDEKCiMg5Ye65Yqb77yI6ZmN6aCG44Gu44G+44G+77yJCnByaW50KHJlc3VsdCkK