#include <bits/stdc++.h>
using namespace std;

int main() {
    int H, W;
    cin >> H >> W;

    vector<string> S(H), T(H);
    for (int i = 0; i < H; i++) cin >> S[i];
    for (int i = 0; i < H; i++) cin >> T[i];

    vector<string> RS(H);
    for (int i = 0; i < H; i++) {
        RS[i] = S[H-1-i];
        reverse(RS[i].begin(), RS[i].end());
    }

    for (int i = 0; i < H; i++) {
        for (int j = 0; j < W; j++) {
            T[i][j] ^= '#' ^ '.';
        }
    }

    double ans = 0;
    int M = 20;
    if (S == T && RS == T) {
        for (int n = 1; n <= M; n++) ans += 1.0 / pow(2, (n-2)*(n-1)/2);
    } else if (S == T && RS != T) {
        for (int n = 1; n <= M; n++) ans += 1.0 / pow(2, (n/2)*(n/2)-n/2);
    } else if (S != T && RS == T) {
        for (int n = 1; n <= M; n++) ans += 1.0 / pow(2, ((n-1)/2)*((n-1)/2));
    } else {
        cout << -1 << endl;
        return 0;
    }

    cout << fixed << setprecision(16) << ans << endl;
}