세 핀 볼링

아직 제출이 없습니다시간 제한1초메모리 제한128 MB

문제

ACM 마을의 볼링은 핀을 3개만 사용한다. 이 볼링 경기의 점수를 계산하는 프로그램을 작성하자.

한 경기는 10개의 프레임으로 이루어지고, 경기 점수는 각 프레임 점수의 합이다. 마지막(10번째)을 제외한 각 프레임에서는 최대 2번 투구할 수 있다. 다만 첫 투구로 핀 3개를 모두 쓰러뜨리면(스트라이크) 그 프레임은 1번만 투구한다.

  • 스트라이크: 첫 투구로 핀 3개를 모두 쓰러뜨린 경우.
  • 스페어: 첫 투구로는 다 못 쓰러뜨렸지만 두 번째 투구로 남은 핀을 모두 쓰러뜨린 경우.
  • 미스: 두 번 투구하고도 핀 3개를 모두 쓰러뜨리지 못한 경우.

10번째 프레임이 미스이면 그 프레임은 2번만 투구한다. 하지만 10번째 프레임이 스트라이크나 스페어이면 보너스 투구를 포함하여 총 3번 투구한다.

프레임 점수 규칙은 다음과 같다.

  • 미스: 두 번의 투구로 쓰러뜨린 핀 수가 그 프레임의 점수다.
  • 스페어: 두 번의 투구로 쓰러뜨린 핀 수(항상 3)에 바로 다음 1번의 투구로 쓰러뜨린 핀 수를 더한 값이 점수다.
  • 스트라이크: 한 번의 투구로 쓰러뜨린 핀 수(항상 3)에 바로 다음 2번의 투구로 쓰러뜨린 핀 수를 더한 값이 점수다.

스페어와 스트라이크는 각각 다음 1번, 다음 2번 투구 결과가 필요하므로, 10번째 프레임이 스트라이크나 스페어일 때 최대 3번까지 투구하는 것이다.

예를 들어 한 경기에서 18번 투구하여 쓰러뜨린 핀 수가 차례로 1, 2, 1, 0, 3, 1, 1, 3, 3, 2, 1, 1, 2, 2, 1, 3, 1, 1 이라면 프레임은 1,2 / 1,0 / 3 / 1,1 / 3 / 3 / 2,1 / 1,2 / 2,1 / 3,1,1 로 나뉘고, 각 프레임 점수는 4 / 1 / 5 / 2 / 8 / 6 / 4 / 5 / 6 / 5 가 되어 이 경기의 점수는 46점이다.

작성할 프로그램은 한 경기에서 각 투구로 쓰러뜨린 핀 수를 읽어 그 경기의 점수를 계산한다.

주의할 점은 입력이 잘못된 경우가 있다는 것이다. 예를 들어 어떤 경기가 2, 2로 시작하면 오류다. 첫 투구에서 핀 3개 중 2개만 쓰러뜨렸으므로 남은 핀은 1개뿐인데, 두 번째 투구에서 2개를 쓰러뜨리는 것은 불가능하기 때문이다. 이처럼 그 순간 서 있는 핀보다 많은 핀을 쓰러뜨리는 입력은 오류로 처리한다. 이 규칙은 10번째 프레임의 보너스 투구에도 똑같이 적용된다(보너스 투구로 핀을 모두 쓰러뜨리면 핀은 다시 세워진다).

입력

프로그램은 표준 입력에서 데이터를 읽는다. 입력은 TT개의 테스트 케이스로 이루어지며 0<T<1000 < T < 100이다. 첫 줄에 TT가 주어진다.

각 테스트 케이스는 두 줄로 구성된다. 첫 줄에는 둘째 줄에 나올 정수의 개수 kk가 주어지며 11k2111 \le k \le 21이다. 둘째 줄에는 각 투구로 쓰러뜨린 핀 수가 kk개 주어지며, 각 값은 0 이상 3 이하의 정수다.

출력

각 테스트 케이스마다 볼링 점수를 한 줄에 하나씩 출력한다. 따라서 출력되는 줄 수는 정확히 TT이다. 어떤 테스트 케이스의 입력이 규칙에 맞지 않으면 그 줄에는 error를 출력한다.