import sys
import bisect
def main():
data = sys.stdin.read().strip().split()
if not data:
return
it = iter(data)
n = int(next(it))
jobs = []
for idx in range(n):
s = int(next(it)); e = int(next(it)); w = int(next(it))
# store original index (1-based), start, end, weight
jobs.append((idx + 1, s, e, w))
# stable sort by end time
jobs.sort(key=lambda x: x[2]) # Python's sort is stable
# prepare arrays (1-based for DP)
ends = [job[2] for job in jobs] # 0-based list of end times
v = [0] * (n + 1) # weights, 1-based
s = [0] * (n + 1) # start times, 1-based
# p[j] = largest index i (0..j-1) such that end_i <= start_j; using 1-based, p in [0..n]
p = [0] * (n + 1)
for j in range(1, n + 1):
_, sj, ej, wj = jobs[j-1]
s[j] = sj
v[j] = wj
# bisect_right returns count of ends <= sj
p[j] = bisect.bisect_right(ends, sj)
# DP compute OPT
OPT = [0] * (n + 1)
for j in range(1, n + 1):
include = v[j] + OPT[p[j]]
exclude = OPT[j-1]
OPT[j] = max(exclude, include)
# Reconstruct solution following the rule:
# if OPT[j-1] >= v[j] + OPT[p[j]] then exclude (skip), else include
solution = []
j = n
while j > 0:
if OPT[j-1] >= v[j] + OPT[p[j]]:
j -= 1
else:
# include job j (its position after sorting)
solution.append(j)
j = p[j]
# Output requires descending order
solution.sort(reverse=True)
print(solution)
if __name__ == "__main__":
main()
aW1wb3J0IHN5cwppbXBvcnQgYmlzZWN0CgpkZWYgbWFpbigpOgogICAgZGF0YSA9IHN5cy5zdGRpbi5yZWFkKCkuc3RyaXAoKS5zcGxpdCgpCiAgICBpZiBub3QgZGF0YToKICAgICAgICByZXR1cm4KICAgIGl0ID0gaXRlcihkYXRhKQogICAgbiA9IGludChuZXh0KGl0KSkKICAgIGpvYnMgPSBbXQogICAgZm9yIGlkeCBpbiByYW5nZShuKToKICAgICAgICBzID0gaW50KG5leHQoaXQpKTsgZSA9IGludChuZXh0KGl0KSk7IHcgPSBpbnQobmV4dChpdCkpCiAgICAgICAgIyBzdG9yZSBvcmlnaW5hbCBpbmRleCAoMS1iYXNlZCksIHN0YXJ0LCBlbmQsIHdlaWdodAogICAgICAgIGpvYnMuYXBwZW5kKChpZHggKyAxLCBzLCBlLCB3KSkKCiAgICAjIHN0YWJsZSBzb3J0IGJ5IGVuZCB0aW1lCiAgICBqb2JzLnNvcnQoa2V5PWxhbWJkYSB4OiB4WzJdKSAgIyBQeXRob24ncyBzb3J0IGlzIHN0YWJsZQoKICAgICMgcHJlcGFyZSBhcnJheXMgKDEtYmFzZWQgZm9yIERQKQogICAgZW5kcyA9IFtqb2JbMl0gZm9yIGpvYiBpbiBqb2JzXSAgIyAwLWJhc2VkIGxpc3Qgb2YgZW5kIHRpbWVzCiAgICB2ID0gWzBdICogKG4gKyAxKSAgIyB3ZWlnaHRzLCAxLWJhc2VkCiAgICBzID0gWzBdICogKG4gKyAxKSAgIyBzdGFydCB0aW1lcywgMS1iYXNlZAogICAgIyBwW2pdID0gbGFyZ2VzdCBpbmRleCBpICgwLi5qLTEpIHN1Y2ggdGhhdCBlbmRfaSA8PSBzdGFydF9qOyB1c2luZyAxLWJhc2VkLCBwIGluIFswLi5uXQogICAgcCA9IFswXSAqIChuICsgMSkKICAgIGZvciBqIGluIHJhbmdlKDEsIG4gKyAxKToKICAgICAgICBfLCBzaiwgZWosIHdqID0gam9ic1tqLTFdCiAgICAgICAgc1tqXSA9IHNqCiAgICAgICAgdltqXSA9IHdqCiAgICAgICAgIyBiaXNlY3RfcmlnaHQgcmV0dXJucyBjb3VudCBvZiBlbmRzIDw9IHNqCiAgICAgICAgcFtqXSA9IGJpc2VjdC5iaXNlY3RfcmlnaHQoZW5kcywgc2opCgogICAgIyBEUCBjb21wdXRlIE9QVAogICAgT1BUID0gWzBdICogKG4gKyAxKQogICAgZm9yIGogaW4gcmFuZ2UoMSwgbiArIDEpOgogICAgICAgIGluY2x1ZGUgPSB2W2pdICsgT1BUW3Bbal1dCiAgICAgICAgZXhjbHVkZSA9IE9QVFtqLTFdCiAgICAgICAgT1BUW2pdID0gbWF4KGV4Y2x1ZGUsIGluY2x1ZGUpCgogICAgIyBSZWNvbnN0cnVjdCBzb2x1dGlvbiBmb2xsb3dpbmcgdGhlIHJ1bGU6CiAgICAjIGlmIE9QVFtqLTFdID49IHZbal0gKyBPUFRbcFtqXV0gdGhlbiBleGNsdWRlIChza2lwKSwgZWxzZSBpbmNsdWRlCiAgICBzb2x1dGlvbiA9IFtdCiAgICBqID0gbgogICAgd2hpbGUgaiA+IDA6CiAgICAgICAgaWYgT1BUW2otMV0gPj0gdltqXSArIE9QVFtwW2pdXToKICAgICAgICAgICAgaiAtPSAxCiAgICAgICAgZWxzZToKICAgICAgICAgICAgIyBpbmNsdWRlIGpvYiBqIChpdHMgcG9zaXRpb24gYWZ0ZXIgc29ydGluZykKICAgICAgICAgICAgc29sdXRpb24uYXBwZW5kKGopCiAgICAgICAgICAgIGogPSBwW2pdCgogICAgIyBPdXRwdXQgcmVxdWlyZXMgZGVzY2VuZGluZyBvcmRlcgogICAgc29sdXRpb24uc29ydChyZXZlcnNlPVRydWUpCiAgICBwcmludChzb2x1dGlvbikKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBtYWluKCkK