#include #include #include using namespace std; int main() { int h, w; cin >> h >> w; vector s(h), t(h); for (int i = 0; i < h; ++i) cin >> s[i]; for (int i = 0; i < h; ++i) cin >> t[i]; int flag[2] = {1, 1}; for (int _t = 0; _t < 2; ++_t) { reverse(s.begin(), s.end()); int tmp = 1; for (int i = 0; i < h; ++i) { for (int j = 0; j < w; ++j) { if (s[i][j] == t[i][j]) { tmp = 0; i = h, j = w; } } } flag[_t] = tmp; } if (flag[0] == 0 && flag[1] == 0) { cout << -1 << endl; return 0; } double ans = 0, v = 1, now = 1; for (int i = 1; i < 10000; ++i) { if (flag[i % 2]) { ans += now * i * (1 - v); now *= v; } v /= 2.0; } printf("%.10f\n", ans); }