가로선이 번 막대와 번 막대를 잇는 것을 라 쓰자. 먼저 높이가 증가하는 순서대로
을 만든다. 앞부분을 역순으로 한 뒷부분이 이어지므로, 이 사다리는 어느 막대에서 출발해도 같은 막대에 도착한다. 여기까지 번의 번 연산을 사용한다.
목표 를 처리할 때 라면 바로 를 출력한다. 그렇지 않다면 일 때 앞부분의 높이 에 있는 을 지운다. 일 때 뒷부분의 높이 에 있는 을 지운다. 그 상태에서 를 출력하고, 방금 지운 가로선을 다시 만든다.
앞부분에서 을 빼면 출발 막대 가 기존의 번 막대 경로로 옮겨진다. 뒷부분에서 을 빼면 그 경로가 번 막대로 이어진다. 따라서 질의의 결과는 이다. 복구 후에는 원래의 항등 사다리가 되므로 다음 목표에도 같은 방법을 쓸 수 있다.
처음에 번, 각 목표마다 최대 번의 번 연산을 사용한다. 총 번 이하이므로 제한을 만족한다. 출력의 길이와 계산 시간은 이다.
증명
가로선 는 그 높이를 지나가는 두 막대 와 의 경로를 교환한다. 처음 만든 가로선열은 앞쪽 열과 그 역열의 연결이므로 전체 경로의 대응은 항등이다.
앞쪽에서 하나를 제거한 효과는 항등 대응에서 과 의 경로를 교환하는 것이다. 뒤쪽에서 하나를 제거한 효과는 과 의 도착 막대를 교환하는 것이다. 두 제거를 함께 적용하면 출발 막대 의 경로가 먼저 의 경로로, 이어서 도착 막대 로 이어진다. 또는 이면 그쪽 제거는 필요 없다.
서브태스크 1에서는 가로선 없이 질의만 출력한다. 서브태스크 2에서는 두 막대를 잇는 가로선 하나를 질의 전후에 토글한다. 서브태스크 3에서는 뒷부분의 가로선만 잠시 지우면 된다. 전체 조건에서는 앞부분과 뒷부분을 모두 사용한다.
Solution written by GPT5
모든 질의 뒤에 제거했던 가로선을 복구하므로 다음 질의의 시작 상태는 항상 항등 사다리이다. 따라서 각 질의가 독립적으로 목표를 만족한다.