블록 부수기
시간 제한2초메모리 제한512 MB
블록을 하나 두드리면 좌우 이웃 중 하나와 앞뒤 이웃 중 하나가 이미 떨어진 경우 함께 무너진다. q번의 이동마다 이번에 떨어지는 블록 수를 구한다.
문제
공중에 수평으로 매달린 크기의 직사각형 틀을 생각하자. 처음에 틀은 크기의 정사각형 블록 개로 빈틈없이 채워져 있다. 틀과 블록 사이, 그리고 블록끼리의 마찰 때문에 블록들은 안정적이며 떨어지지 않는다.
하지만 블록을 쳐서 떨어뜨릴 수 있다. 어떤 블록을 쳐서 떨어뜨리면, 남은 블록들이 주는 마찰만으로는 버티지 못하는 블록들이 함께 떨어질 수 있다. 정확히 말해, 블록이 맞거나 불안정하면 떨어진다. 블록은 왼쪽과 오른쪽 이웃 중 적어도 하나가 떨어졌고 앞뒤 이웃 중 적어도 하나도 떨어졌을 때 불안정하다. 이 정의에서 틀은 항상 안정적인 거대한 블록으로 볼 수 있다.
이제 블록 부수기인 당신은 블록을 쳐서 떨어뜨리려 한다. 정확히 말해, 번의 이동을 한다. 번째 이동에서 위치 를 고른다. 고른 위치에 아직 블록이 있으면 그 블록을 쳐서 떨어뜨리고, 없으면 아무 일도 일어나지 않는다. 각 이동이 끝나면 불안정한 블록이 더 이상 떨어지지 않을 때까지 기다린 뒤 다음 이동을 한다.
예를 들어 다음 그림을 보자. 틀의 크기는 이고 블록 과 는 이미 떨어졌다. 여기서 블록 를 치면 이 블록이 떨어지고, 그 뒤 마지막으로 남은 블록 도 불안정해져 함께 떨어진다.

수행할 이동의 순서가 주어진다. 각 이동의 결과로 몇 개의 블록이 떨어지는지 구하자. 이동 중에 아무 일도 일어나지 않으면 그 이동의 답은 0이다.
입력
첫째 줄에는 테스트 케이스의 수를 나타내는 양의 정수 가 주어진다. () 각 테스트 케이스는 다음과 같다.
첫째 줄에는 세 양의 정수 , , 가 주어진다. 과 은 틀의 크기, 는 이동의 수다. (, )
다음 개 줄에는 각각 두 양의 정수 와 가 주어지며, 다음에 수행할 이동을 나타낸다. (, )
출력
각 테스트 케이스마다 개 줄을 출력한다. 각 줄에는 해당 이동의 결과로 떨어지는 블록의 수를 나타내는 음이 아닌 정수를 출력한다.