1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include <bits/stdc++.h>
using namespace std;

typedef long long int lli;
typedef long double lf;

const int MAXN = 20;

char t[MAXN][MAXN];

char tar[MAXN][MAXN];

int trans(char a, char b) {
	if (a == 'O' && b == '.')
		return 1;
	if (a == '.' && b == 'O')
		return 1;
	return 0;
}

lli binom(lli n, lli k) {
	lli res = 1;
	lli k_fac = 1;
	
	for (lli i=0; i<k; i++) {
		res *= n-i;
		k_fac *= i+1;
	}
	
	return res / k_fac;
}

int main() {
	lli n, m, k=0;
	lli deg = 0;
	
	int par = 0;
	
	scanf("%lld%lld%*c", &n, &m);
	
	for (int i=0; i<n; i++)
		scanf("%s", t[i]);
	
	for (int i=0; i<n; i++) {
		for (int j=0; j<m; j++) {
			if (t[i][j] == 'O') {
				k++;
				
				par += i+j;
			}
		}
	}
	
	scanf("%*c");
	
	for (int i=0; i<n; i++)
		scanf("%s", tar[i]);
	
	for (int i=0; i<n; i++) {
		for (int j=0; j<m; j++) {
			if (tar[i][j] == 'O') {
				par -= i+j;
			}
			
			deg += trans(tar[i][j], tar[i][j+1]);
			deg += trans(tar[i][j], tar[i+1][j]);
		}
	}
	
	if (par % 2 != 0) {
		printf("0\n");
		return 0;
	}
	
	lf sumdeg = (2*m*n - n - m) * 2 * binom(n*m-2, k-1);
	lf tar_deg = 2 * deg;
	
	printf("%.15Lf\n", tar_deg / sumdeg);
	
	return 0;
}