I want to understand the issue with my code

Problem Info

Bovine Genomics USACO

Question

I am not able to figure out what is wrong with the approach I am trying explained below.

What I’ve Tried

I have used two sets to differentiate between spotted cows and plain cows. If a string in spotted set is also present in plain set then that is set is invalid. If the set is valid then adding that set to valid sets.

My Work

int n, m;
    cin >> n >> m;
    vector<string> spotted(n), plain(n);
    for (string &st: spotted) cin >> st;
    for (string &st: plain) cin >> st;

    int valid_sets = 0;
    for (int i = 0; i < m; i++) {
        for (int j = i+1; j < m; j++) {
            for (int k = j+1; k < m; k++) {
                set<string> spot_set, plain_set;
                for (int l = 0; l < n; l++) {
                    string a = "" + spotted[l][i] + spotted[l][j] + spotted[l][k];
                    string b = "" + plain[l][i] + plain[l][j] + plain[l][k];
                    spot_set.insert(a);
                    plain_set.insert(b);
                }
                bool ok = true;
                for (const string &str: spot_set) {
                    if (plain_set.count(str)) {
                        ok = false;
                        break;
                    }
                }
                if (ok) valid_sets++;
            }
        }
    }
    cout << valid_sets << "\n";

For each set of (i, j, k) adding a string for each of the spotted and plain cows in spot_set and plain_set. If a string present in spot_set is also present is plain_set, then that set is invalid, otherwise adding that set to valid sets.