#include <bits/stdc++.h>
using namespace std;
const int maxn = 1005;
char st[maxn][maxn];
int row[maxn], col[maxn];
int n, m, tot;
long long ret;
void init() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; i++) scanf("%s", st[i] + 1);
}
inline int Fabs(int x) { return x < 0 ? -x : x; }
inline int calc(int x, int y) {
  return n * (y - 1) * y / 2 + n * (m - y) * (m - y + 1) / 2 +
         m * (x - 1) * x / 2 + m * (n - x) * (n - x + 1) / 2;
}
void work() {
  ret = tot = 0;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++)
      if (st[i][j] == 'X') {
        ret -= calc(i, j);
        row[i] = j;
        col[j] = i;
      } else {
        tot++;
        ret += calc(i, j);
      }
  for (int i = 1; i <= n; i++)
    if (row[i])
      for (int j = i + 1; j <= n; j++)
        if (row[j]) ret += (Fabs(row[j] - row[i]) + j - i) * 2;
  for (int i = 1; i <= n; i++)
    if (row[i]) {
      ret += 4 * (row[i] - 1) * (m - row[i]);
      for (int j = i + 1; j <= n; j++)
        if (row[j] < row[j - 1])
          break;
        else
          ret += 4 * (row[i] - 1) * (m - row[j]);
      for (int j = i - 1; j >= 1; j--)
        if (row[j] < row[j + 1])
          break;
        else
          ret += 4 * (row[i] - 1) * (m - row[j]);
    }
  for (int i = 1; i <= m; i++)
    if (col[i]) {
      ret += 4 * (col[i] - 1) * (n - col[i]);
      for (int j = i + 1; j <= m; j++)
        if (col[j] < col[j - 1])
          break;
        else
          ret += 4 * (col[i] - 1) * (n - col[j]);
      for (int j = i - 1; j >= 1; j--)
        if (col[j] < col[j + 1])
          break;
        else
          ret += 4 * (col[i] - 1) * (n - col[j]);
    }
}
void print() { printf("%.10lf\n", ret / (double)tot / tot); }
int main() {
  init();
  work();
  print();
  return 0;
}
