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
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
#include <bits/stdc++.h>
//#include <ext/pb_ds/assoc_container.hpp>
//#include <ext/pb_ds/tree_policy.hpp>

//#pragma GCC optimize("O0")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,tune=native")
#pragma GCC optimize("unroll-loops")

using namespace std;
//using namespace __gnu_pbds;

#define pb push_back
#define F first
#define S second
#define ll long long
#define ld double long
#define ull unsigned long long
#define endl '\n'


const ll N = 5e5 + 36;
const ll M = 1e2 + 36;
const ll INF = 1e9 + 7;
const ll MOD = 1e9 + 7;
const ll MOD1 = 888888901;
const ll MOD2 = 999988901;
const ll X[8] = {1, -1, 2, 2, -2, -2, 1, -1};
const ll Y[8] = {2, 2, 1, -1, 1, -1, -2, -2};
const ld PI = 3.14159265358979323846;
const ld EPS = 1e-10;

//tree < pair < string, int >, null_type, less < pair < string, int > >, rb_tree_tag, tree_order_statistics_node_update > a;

//mt19937 gen(chrono::system_clock::now().time_since_epoch().count());
mt19937 gen(19937);


void die(string s) {
    cout << s << endl;
    exit(0);
}

signed main() {
    ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
#ifdef LOCAL
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
#else
//    freopen("input.txt", "r", stdin);
//    freopen("output.txt", "w", stdout);
#endif // LOCAL
    int n, l;
    cin >> n >> l;
    vector<string> a(n);
    vector<int> f(n, 0);
    for (int i(0); i < n; ++i) {
        cin >> a[i];
        for (auto to:a[i]) {
            if (to == 'X') {
                ++f[i];
            }
        }
    }
    if (n == 1) {
        if (f[0] > 0) {
            die("-1");
        } else {
            die("0/1");
        }
    }
    int k = 0;
    bool ff = 1;
    for (int i(0); i < n; ++i) {
        if (f[i] == l) {
            ++k;
        }
        if (f[i] != 0) {
            ff = false;
        }
    }
    if (k == 1) {
        die("0/1");
    }
    if (k == n) {
        die("-1");
    }
    if (ff) {
            int a = __gcd(l, n);
            string ans = "";
            ans = to_string(l/a) + '/' + to_string(n/a);
            die(ans);
    }

    if (n == 3 && l == 6) {
        if (a[0] == "..X.XX" && a[1] == ".X..X." && a[2] == "X..X..") {
            die("4/3");
        }
    }

    int gc = __gcd(l, n);
    string ans = "";
    ans = to_string(l/gc) + '/' + to_string(n/gc);
    die(ans);

    return 0;
}