#include <stdio.h>
void answer(int count) {
}
#define Y_SIZE (300)
#define X_SIZE (300)
int H; // ホーム画面縦の区画数
int W; // ホーム画面横の区画数
int array[Y_SIZE][X_SIZE]; // ホーム画面の配置
int hori_emp_seg_len[Y_SIZE + 1][X_SIZE]; // 水平空き線分の長さ
int hori_emp_seg_crs_len_min[Y_SIZE][X_SIZE]; // 水平空き線分と直交する垂直空き線分の長さの最小値
int hori_emp_seg_crs_len_max[Y_SIZE][X_SIZE]; // 水平空き線分と直交する垂直空き線分の長さの最大値
int hori_emp_seg_len_row_max[Y_SIZE]; // 水平空き線分の長さの行ごとの最大値
int hori_fil_seg_len[Y_SIZE][X_SIZE]; // 水平埋め線分の長さ
int vert_emp_seg_len[Y_SIZE][X_SIZE + 1]; // 垂直空き線分の長さ
int vert_emp_seg_crs_len_min[Y_SIZE][X_SIZE]; // 垂直空き線分と直交する水平空き線分の長さの最小値
int vert_emp_seg_crs_len_max[Y_SIZE][X_SIZE]; // 垂直空き線分と直交する水平空き線分の長さの最大値
int vert_emp_seg_len_col_max[X_SIZE]; // 垂直空き線分の長さの列ごとの最大値
int vert_fil_seg_len[Y_SIZE][X_SIZE]; // 垂直埋め線分の長さ
int cache[Y_SIZE + 1][X_SIZE + 1]; // 配置可能座標の数のキャッシュ
int // 配置可能座標の数
resolve_hori(S, T)
int S; // ウィジェットの縦サイズ
int T; // ウィジェットの横サイズ
{
int count, len;
int x, y;
count = 0;
for (y = 0; y <= H - S; y++) {
if (hori_emp_seg_len_row_max[y] >= T) {
for (x = 0; x < W;) {
if (array[y][x]) {
x += hori_fil_seg_len[y][x];
} else if (hori_emp_seg_len[y][x] >= T) {
if (hori_emp_seg_crs_len_min[y][x] >= S) {
count += hori_emp_seg_len[y][x] - T + 1;
x += hori_emp_seg_len[y][x] + 1;
} else if (hori_emp_seg_crs_len_max[y][x] < S) {
x += hori_emp_seg_len[y][x] + 1;
} else {
for (len = 0; vert_emp_seg_len[y][x + len] >= S; len++);
if (len >= T) {
count += len - T + 1;
}
x += len + 1;
}
} else {
x += hori_emp_seg_len[y][x] + 1;
}
}
}
}
return count;
}
int // 配置可能座標の数
resolve_vert(S, T)
int S; // ウィジェットの縦サイズ
int T; // ウィジェットの横サイズ
{
int count, len;
int x, y;
count = 0;
for (x = 0; x <= W - T; x++) {
if (vert_emp_seg_len_col_max[x] >= S) {
for (y = 0; y < H;) {
if (array[y][x]) {
y += vert_fil_seg_len[y][x];
} else if (vert_emp_seg_len[y][x] >= S) {
if (vert_emp_seg_crs_len_min[y][x] >= T) {
count += vert_emp_seg_len[y][x] - S + 1;
y += vert_emp_seg_len[y][x] + 1;
} else if (vert_emp_seg_crs_len_max[y][x] < T) {
y += vert_emp_seg_len[y][x] + 1;
} else {
for (len = 0; hori_emp_seg_len[y + len][x] >= T; len++);
if (len >= S) {
count += len - S + 1;
}
y += len + 1;
}
} else {
y += vert_emp_seg_len[y][x] + 1;
}
}
}
}
return count;
}
void resolve(S, T)
int S; // ウィジェットの縦サイズ
int T; // ウィジェットの横サイズ
{
if (cache[S][T] < 0) {
if (S < T) {
cache[S][T] = resolve_hori(S, T);
} else {
cache[S][T] = resolve_vert(S, T);
}
}
answer(cache[S][T]);
}
int main(void) {
char str[305];
int N, s, t;
int x, y, i;
int fil, len, len_min, len_max;
for (y = 0; y < H; y++) {
for (x = 0; x < W; x++) {
array[y][x] = (int)(str[x] - '0');
}
}
for (y = 0; y < H; y++) {
hori_emp_seg_len_row_max[y] = 0;
fil = 0;
len = 0;
for (x = W - 1; x >= 0; x--) {
if (array[y][x] == fil) {
len++;
} else {
fil = array[y][x];
len = 1;
}
if (fil) {
hori_emp_seg_len[y][x] = 0;
hori_fil_seg_len[y][x] = len;
} else {
hori_emp_seg_len[y][x] = len;
hori_fil_seg_len[y][x] = 0;
if (len > hori_emp_seg_len_row_max[y]) {
hori_emp_seg_len_row_max[y] = len;
}
}
}
}
for (x = 0; x < W; x++) {
hori_emp_seg_len[H][x] = 0;
}
for (x = 0; x < W; x++) {
vert_emp_seg_len_col_max[x] = 0;
fil = 0;
len = 0;
for (y = H - 1; y >= 0; y--) {
if (array[y][x] == fil) {
len++;
} else {
fil = array[y][x];
len = 1;
}
if (fil) {
vert_emp_seg_len[y][x] = 0;
vert_fil_seg_len[y][x] = len;
} else {
vert_emp_seg_len[y][x] = len;
vert_fil_seg_len[y][x] = 0;
if (len > vert_emp_seg_len_col_max[x]) {
vert_emp_seg_len_col_max[x] = len;
}
}
}
}
for (y = 0; y < H; y++) {
vert_emp_seg_len[y][W] = 0;
}
for (y = 0; y < H; y++) {
len_min = H;
len_max = 0;
for (x = W - 1; x >= 0; x--) {
if (array[y][x]) {
len_min = H;
len_max = 0;
} else {
if (vert_emp_seg_len[y][x] < len_min) {
len_min = vert_emp_seg_len[y][x];
}
if (vert_emp_seg_len[y][x] > len_max) {
len_max = vert_emp_seg_len[y][x];
}
hori_emp_seg_crs_len_min[y][x] = len_min;
hori_emp_seg_crs_len_max[y][x] = len_max;
}
}
}
for (x = 0; x < W; x++) {
len_min = W;
len_max = 0;
for (y = H - 1; y >= 0; y--) {
if (array[y][x]) {
len_min = W;
len_max = 0;
} else {
if (hori_emp_seg_len[y][x] < len_min) {
len_min = hori_emp_seg_len[y][x];
}
if (hori_emp_seg_len[y][x] > len_max) {
len_max = hori_emp_seg_len[y][x];
}
vert_emp_seg_crs_len_min[y][x] = len_min;
vert_emp_seg_crs_len_max[y][x] = len_max;
}
}
}
for (y = 1; y <= H; y++) {
for (x = 1; x <= W; x++) {
cache[y][x] = -1;
}
}
for (i = 0; i < N; i++) {
resolve(s, t);
}
return 0;
}