249072026-02-16 17:45:55LazurAndrasFagyasztópypy3Accepted 75/7590ms22248 KiB
import sys
input = sys.stdin.readline

def solve():
    n = int(input())
    a = []
    for i in range(n):
        x, y = [int(x) for x in input().split()]
        if y < 4: continue
        if y == 4: a.append((x, False, i+1))
        else: a.append((x, True, i+1))
    n = len(a)
    a.sort(reverse = True)
    l, r = 0, n
    while l < r-1:
        mid = (l+r) // 2
        cnt0, cnt1 = 0, 0
        i = 0
        t = 1
        while i < n and a[i][0] >= mid:
            if a[i][1]: cnt1 += 1
            else: cnt0 += 1
            i += 1
        for j in range(mid, 0, -1):
            while i < n and a[i][0] >= j:
                if a[i][1]: cnt1 += 1
                else: cnt0 += 1
                i += 1
            if cnt0:
                cnt0 -= 1
                if cnt1: cnt1 -= 1
                else:
                    t = 0
                    break
            else:
                if cnt1 >= 2: cnt1 -= 2
                else:
                    t = 0
                    break
        if t: l = mid
        else: r = mid
    print(l)
    ans0, ans1 = [], []
    i0, i1 = 0, 0
    i = 0
    ans = []
    while i < n and a[i][0] >= l:
        if a[i][1]: ans1.append(a[i][2])
        else: ans0.append(a[i][2])
        i += 1
    for j in range(l, 0, -1):
        while i < n and a[i][0] >= j:
            if a[i][1]: ans1.append(a[i][2])
            else: ans0.append(a[i][2])
            i += 1
        if len(ans0) > i0:
            ans.append((ans0[i0], ans1[i1]))
            i0 += 1
            i1 += 1
        else:
            ans.append((ans1[i1], ans1[i1+1]))
            i1 += 2
    ans.reverse()
    for u in ans: print(*u)

solve()
SubtaskSumTestVerdictTimeMemory
subtask10/0
1Accepted45ms19692 KiB
subtask210/10
2Accepted39ms19828 KiB
3Accepted39ms19672 KiB
4Accepted45ms19712 KiB
5Accepted43ms19780 KiB
6Accepted46ms19684 KiB
7Accepted39ms19660 KiB
8Accepted39ms19804 KiB
9Accepted43ms19692 KiB
10Accepted39ms19744 KiB
11Accepted46ms19688 KiB
subtask320/20
12Accepted39ms19872 KiB
13Accepted39ms19708 KiB
14Accepted43ms19816 KiB
15Accepted43ms19664 KiB
16Accepted46ms19688 KiB
17Accepted46ms21064 KiB
18Accepted46ms21224 KiB
19Accepted48ms21080 KiB
20Accepted50ms21304 KiB
21Accepted56ms21736 KiB
22Accepted45ms21212 KiB
23Accepted71ms22060 KiB
24Accepted68ms21996 KiB
25Accepted59ms21892 KiB
26Accepted50ms21060 KiB
27Accepted76ms21984 KiB
28Accepted76ms22108 KiB
29Accepted45ms21228 KiB
30Accepted70ms21992 KiB
31Accepted76ms22048 KiB
subtask415/15
32Accepted46ms19764 KiB
33Accepted43ms19796 KiB
34Accepted39ms19704 KiB
35Accepted43ms21020 KiB
36Accepted54ms21572 KiB
37Accepted61ms21476 KiB
38Accepted50ms21172 KiB
39Accepted43ms21212 KiB
40Accepted48ms21476 KiB
41Accepted67ms21784 KiB
42Accepted56ms21848 KiB
43Accepted68ms21976 KiB
44Accepted43ms21228 KiB
45Accepted59ms21476 KiB
46Accepted68ms22248 KiB
subtask515/15
47Accepted45ms21396 KiB
48Accepted46ms21376 KiB
49Accepted50ms21220 KiB
50Accepted48ms21188 KiB
51Accepted52ms21044 KiB
52Accepted43ms21228 KiB
53Accepted48ms21264 KiB
54Accepted46ms21220 KiB
55Accepted39ms19948 KiB
56Accepted52ms21536 KiB
57Accepted48ms21112 KiB
58Accepted48ms21112 KiB
59Accepted54ms21136 KiB
60Accepted48ms21032 KiB
61Accepted41ms21224 KiB
subtask615/15
62Accepted50ms21436 KiB
63Accepted52ms21452 KiB
64Accepted71ms21704 KiB
65Accepted90ms22212 KiB
66Accepted79ms22092 KiB
67Accepted43ms21188 KiB
68Accepted59ms21480 KiB
69Accepted54ms21168 KiB
70Accepted48ms21480 KiB
71Accepted82ms22104 KiB
72Accepted56ms21476 KiB
73Accepted65ms22064 KiB
74Accepted67ms21924 KiB
75Accepted61ms21480 KiB
76Accepted43ms21152 KiB