#include <bits/stdc++.h>
long long int finv[1000000];
long long int fac[1000000];
long long int inv[1000000];
long long int usort(const void *a, const void *b) {
  return *(long long int *)a - *(long long int *)b;
}
long long int dsort(const void *a, const void *b) {
  return *(long long int *)b - *(long long int *)a;
}
long long int ssort(const void *a, const void *b) {
  return strcmp((char *)a, (char *)b);
}
long long int min(long long int a, long long int b) {
  if (a > b) return b;
  return a;
}
long long int max(long long int a, long long int b) {
  if (a > b) return a;
  return b;
}
long long int z(long long int a) { return max(a, -a); }
long long int gcd(long long int a, long long int b) {
  if (!b) {
    return a;
  } else {
    return gcd(b, a % b);
  }
}
long long int lcm(long long int a, long long int b) {
  return a * b / gcd(a, b);
}
long long int kt(long long int a) {
  long long int sum = 0;
  while (a) {
    a /= 10;
    sum++;
  }
  return sum;
}
long long int ks(long long int a) {
  long long int sum = 0;
  while (a) {
    sum += a % 10;
    a /= 10;
  }
  return sum;
}
void ppp() {
  fac[0] = fac[1] = 1;
  finv[0] = finv[1] = 1;
  inv[1] = 1;
  for (int i = 2; i < 1000000; i++) {
    fac[i] = fac[i - 1] * i % 1000000007;
    inv[i] = 1000000007 - inv[1000000007 % i] * (1000000007 / i) % 1000000007;
    finv[i] = finv[i - 1] * inv[i] % 1000000007;
  }
}
long long int nCr(int n, int k) {
  return fac[n] * (finv[k] * finv[n - k] % 1000000007) % 1000000007;
}
int ans = 0;
int q[21][21];
int h;
int w;
void f(int x, int y) {
  if (x < h) {
    if (q[x + 1][y] >= q[x][y]) {
      q[x + 1][y] = q[x][y] + 1;
      f(x + 1, y);
    }
  }
  if (y < w) {
    if (q[x][y + 1] >= q[x][y]) {
      q[x][y + 1] = q[x][y] + 1;
      f(x, y + 1);
    }
  }
  if (x >= 0) {
    if (q[x - 1][y] >= q[x][y]) {
      q[x - 1][y] = q[x][y] + 1;
      f(x - 1, y);
    }
  }
  if (y >= 0) {
    if (q[x][y - 1] >= q[x][y]) {
      q[x][y - 1] = q[x][y] + 1;
      f(x, y - 1);
    }
  }
  ans = max(ans, q[x][y]);
}
int main(void) {
  scanf("%d %d", &h, &w);
  char s[30][30];
  for (int i = 0; i < h; i++) scanf("%s", s[i]);
  for (int i = 0; i < h; i++) {
    for (int j = 0; j < w; j++) {
      if (s[i][j] == '.') {
        for (int x = 0; x < h; x++) {
          for (int y = 0; y < w; y++) {
            if (s[x][y] == '.') {
              q[x][y] = 1000000;
            } else {
              q[x][y] = -2;
            }
          }
        }
        q[i][j] = 0;
        f(i, j);
        for (int x = 0; x < h; x++) {
          for (int y = 0; y < w; y++) printf("%d ", q[x][y]);
          printf("%s\n", "");
        }
        printf("%s\n", "");
      }
    }
  }
  printf("%d\n", ans);
  return 0;
}
