불 밝히기
시간 제한1초메모리 제한128 MB
크기가 7×7 이하이고 숫자가 적힌 장애물이 있는 판에서 모든 빈 칸을 밝히면서 두 램프가 서로를 비추지 않고 숫자 장애물마다 인접 램프 수가 정확히 맞도록 하는 최소 램프 개수를 구하거나 해가 없음을 판정한다.
문제
불 밝히기(Light Up)는 여러 개의 작은 정사각형 칸으로 나뉜 직사각형 판 위에서 진행하는 퍼즐이다. 판의 일부 칸은 "빈 칸"(아래 그림의 흰색 칸)이고, 일부 칸은 "벽 칸"(아래 그림의 검은색 칸)이다. 벽 칸에는 정수 ()가 적혀 있을 수도 있다.

그림 2: (a) 6행 7열, 벽 7개로 이루어진 퍼즐; (b) 그 퍼즐의 한 가지 해.
이 퍼즐의 목표는 일부 빈 칸에 전구(그림에서 원으로 표시)를 놓아 모든 빈 칸을 "밝히는" 것이다. 각 전구는 자신이 놓인 칸을 밝히고, 거기에서 가로 또는 세로로 일직선을 따라 벽 칸이나 판의 끝에 닿을 때까지의 모든 칸을 함께 밝힌다.
올바른(승리) 배치는 다음 조건을 모두 만족한다.
- 모든 빈 칸이 밝혀져야 한다.
- 어떤 전구도 다른 전구에 의해 밝혀져서는 안 된다.
- 숫자가 적힌 모든 벽 칸은, 그 칸과 상하좌우로 인접한 네 칸 중 정확히 그 숫자만큼의 칸에 전구가 놓여 있어야 한다.
- 숫자가 없는 벽 칸에는 인접한 전구의 개수에 제한이 없다.
올바른 배치를 이루는 데 필요한 전구의 최소 개수를 구하는 프로그램을 작성하여라.
입력
입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스의 첫 줄에는 판의 행 수와 열 수를 나타내는 두 정수 , 이 주어진다 (, ). 둘째 줄에는 벽 칸의 개수를 나타내는 정수 가 주어진다 (). 이어지는 개의 줄에는 각 벽 칸을 나타내는 세 정수 , , 가 주어지며, 각각 행 번호(), 열 번호(), 벽의 숫자()를 뜻한다. 은 숫자가 없는 벽임을 뜻한다. 입력의 끝은 인 줄로 표시된다.
출력
각 테스트 케이스마다 한 줄을 출력한다. 올바른 배치가 존재하면 그 배치를 이루는 데 필요한 전구의 최소 개수를, 존재하지 않으면 No solution을 출력한다.