Snakes on a Plane

Time Limit: 1000 ms Memory Limit: 65536 KiB

Problem Description

Assume we have an n×m grid of squares, each filled with either 0 or 1. A snake is a connected sequence of grid squares which has the following properties:

1. Each snake square has a 1 in it

2. Each snake square touches exactly two other snake squares (north/south/east/west), except the first and last square in the sequence (the head and tail of the snake)

A maximal snake is one in which we cannot add a 1 to either end without either lengthening the snake, combining two snakes together, or violating rule 2 above.
The examples below show grids with and without maximal snakes (all empty squares have 0’s in them). Notice that the second grid does not have a maximal snake since you can add a 1 at the end of either snake to get a larger snake.

For this problem, you will be given grids and must count the number of maximal snakes in each.

Input

Input will consist of multiple test cases. The first line of each test case will contain two positive integers n m indicating the number of rows and columns in the grid (the maximum value of each will be 200). The next n lines will consist of m characters (either ’0’ or ’1’) specifying the grid. The last case is followed by a line containing 0 0 which indicates end-of-input and should not be processed.

Output

For each test case, output a single line containing the number of maximal snakes in the grid.

Sample Input

7 10
1111111110
0000000010
1100000011
1011110001
1010010001
1010010111
1110011100
7 10
1111111110
0000000010
0001010011
1011010001
1010010001
1010010111
1110011100
7 10
1011111110
0100000010
1101011011
1011010001
1010010001
1010010111
1110011100
0 0

Sample Output

1
0
3

Source

The 2006 ACM-ICPC East Central North America