#include <bits/stdc++.h>
using namespace std;
vector<pair<int, int>> dirs = {{0, 1}, {0, -1}, {-1, 0}, {1, 0}};
bool valid(int i, int j, int row_num, int col_num)
{
if (i < 0 || i >= row_num)
{
return false;
}
if (j < 0 || j >= col_num)
{
return false;
}
return true;
}
int floors(int si, int sj, int row_num, int col_num, vector<vector<char>> &grid, vector<vector<bool>> &vis)
{
vis[si][sj] = true;
int area = 0;
for (auto mov : dirs)
{
int ci = si + mov.first;
int cj = sj + mov.second;
if (valid(ci, cj, row_num, col_num))
{
if (!vis[ci][cj] && grid[ci][cj] == '0')
{
area += floors(ci, cj, row_num, col_num, grid, vis);
}
}
}
return area + 1;
}
int main()
{
int k;
cin >> k;
for (int f = 1; f <= k; f++)
{
int row_num, col_num;
cin >> row_num >> col_num;
vector<vector<char>> grid(row_num, vector<char>(col_num));
vector<vector<bool>> vis(row_num, vector<bool>(col_num, false));
for (int i = 0; i < row_num; i++)
{
for (int j = 0; j < col_num; j++)
{
cin >> grid[i][j];
}
}
int max_area = INT_MIN;
for (int i = 0; i < row_num; i++)
{
for (int j = 0; j < col_num; j++)
{
if (grid[i][j] == '0' && !vis[i][j])
{
max_area = max(max_area, floors(i, j, row_num, col_num, grid, vis));
}
}
}
cout << "Floor #" << f << ": " << max_area << endl;
}
return 0;
}