#include <bits/stdc++.h>
using namespace std;
int n, m;
int a[1100], b[1100];
char s[1100];
long long ans = 0, num;
void init() {
  scanf("%d%d", &n, &m), num = n * m;
  memset(a, 0, sizeof(a));
  memset(b, 0, sizeof(b));
  for (int i = 1; i <= n; ++i) {
    scanf("%s", s + 1);
    for (int j = 1; j <= m; ++j)
      if (s[j] == 'X')
        a[i] = j, b[j] = i, --num,
        ans += 4 * (j - 1) * (m - j) + 4 * (i - 1) * (n - i);
  }
}
void Gans() {
  for (int i = 1; i <= n; ++i)
    for (int j = 1; j <= n; ++j)
      ans += (long long)abs(i - j) * (m - (a[i] > 0)) * (m - (a[j] > 0));
  for (int i = 1; i <= m; ++i)
    for (int j = 1; j <= m; ++j)
      ans += (long long)abs(i - j) * (n - (b[i] > 0)) * (n - (b[j] > 0));
  for (int i = 1, j; i <= n; i = j) {
    while (a[i] == 0 && i <= n) ++i;
    if (i > n) break;
    j = i + 1;
    while (a[j] != 0 && a[j] > a[j - 1]) ++j;
    for (int k = i; k < j; ++k)
      for (int l = k + 1; l < j; ++l) ans += 4LL * (a[k] - 1) * (m - a[l]);
  }
  for (int i = 1, j; i <= n; i = j) {
    while (a[i] == 0 && i <= n) ++i;
    if (i > n) break;
    j = i + 1;
    while (a[j] != 0 && a[j] < a[j - 1]) ++j;
    for (int k = i; k < j; ++k)
      for (int l = k + 1; l < j; ++l) ans += 4LL * (a[l] - 1) * (m - a[k]);
  }
  for (int i = 1, j; i <= m; i = j) {
    while (b[i] == 0 && i <= m) ++i;
    if (i > m) break;
    j = i + 1;
    while (b[j] != 0 && b[j] > b[j - 1]) ++j;
    for (int k = i; k < j; ++k)
      for (int l = k + 1; l < j; ++l) ans += 4LL * (b[k] - 1) * (n - b[l]);
  }
  for (int i = 1, j; i <= m; i = j) {
    while (b[i] == 0 && i <= m) ++i;
    if (i > m) break;
    j = i + 1;
    while (b[j] != 0 && b[j] < b[j - 1]) ++j;
    for (int k = i; k < j; ++k)
      for (int l = k + 1; l < j; ++l) ans += 4LL * (b[l] - 1) * (n - b[k]);
  }
  printf("%.10lf\n", (double)ans / (num * num));
}
int main() {
  init();
  Gans();
  return 0;
}
