#include <bits/stdc++.h>
using namespace std;
const int MN = 1000 + 10;
char a[MN][MN];
vector<pair<int, int> > forb;
long long dist(int n) {
  long long sum = 0;
  for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++) sum += (long long)abs(i - j);
  return sum;
}
long long dist(int n, int p) {
  long long sum = 0;
  for (int i = 0; i < n; i++) sum += (long long)abs(i - p);
  return sum;
}
long long magic(int n) {
  sort(forb.begin(), forb.end());
  long long sum = 0;
  for (int i = 0; i < forb.size(); i++) {
    sum += 4ll * forb[i].second * (n - 1ll - forb[i].second);
    bool f = true;
    int j = i + 1;
    while (f && j < forb.size()) {
      f = false;
      if (forb[j].first - forb[i].first != j - i) continue;
      if ((forb[i].second < forb[i + 1].second) !=
          (forb[j - 1].second < forb[j].second))
        continue;
      if (forb[i].second < forb[i + 1].second)
        sum += 4ll * forb[i].second * (n - 1ll - forb[j].second);
      else
        sum += 4ll * forb[j].second * (n - 1ll - forb[i].second);
      f = true;
      j++;
    }
  }
  return sum;
}
int main() {
  int n, m;
  long long ans = 0;
  cin >> n >> m;
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++) {
      cin >> a[i][j];
      if (a[i][j] == 'X') forb.push_back(make_pair(i, j));
    }
  ans += dist(n) * m * m;
  ans += dist(m) * n * n;
  for (int i = 0; i < forb.size(); i++) {
    ans -= 2ll * dist(n, forb[i].first) * m;
    ans -= 2ll * dist(m, forb[i].second) * n;
  }
  for (int i = 0; i < forb.size(); i++)
    for (int j = 0; j < forb.size(); j++)
      ans += ((long long)abs(forb[i].first - forb[j].first) +
              (long long)abs(forb[i].second - forb[j].second));
  ans += magic(m);
  for (int i = 0; i < forb.size(); i++) swap(forb[i].first, forb[i].second);
  ans += magic(n);
  printf("%0.10lf", (double)ans / ((double)(n * m - forb.size()) *
                                   (double)(n * m - forb.size())));
  return 0;
}
