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

#ifdef LOCAL
#define DEBUG(...) debug(#__VA_ARGS__, __VA_ARGS__)
#else
#define DEBUG(...) 6
#endif

template<typename T, typename S> ostream& operator << (ostream &os, const pair<T, S> &p) {return os << "(" << p.first << ", " << p.second << ")";}
template<typename C, typename T = decay<decltype(*begin(declval<C>()))>, typename enable_if<!is_same<C, string>::value>::type* = nullptr>
ostream& operator << (ostream &os, const C &c) {bool f = true; os << "["; for (const auto &x : c) {if (!f) os << ", "; f = false; os << x;} return os << "]";}
template<typename T> void debug(string s, T x) {cerr << "\033[1;35m" << s << "\033[0;32m = \033[33m" << x << "\033[0m\n";}
template<typename T, typename... Args> void debug(string s, T x, Args... args) {for (int i=0, b=0; i<(int)s.size(); i++) if (s[i] == '(' || s[i] == '{') b++; else
if (s[i] == ')' || s[i] == '}') b--; else if (s[i] == ',' && b == 0) {cerr << "\033[1;35m" << s.substr(0, i) << "\033[0;32m = \033[33m" << x << "\033[31m | "; debug(s.substr(s.find_first_not_of(' ', i + 1)), args...); break;}}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    int n;
    cin >> n;
    vector<array<int, 2>> trie(1);
    vector<int> cnt(1);
    for (int i=0; i<n; i++) {
        string s;
        cin >> s;

        uint32_t val = 0;
        int last = 0;
        for (int j=0; j<(int)s.size(); j++)
            if (s[j] == '.' || s[j] == '/') {
                val = (val << 8) + stoi(s.substr(last, j - last));
                last = j + 1;
            }
        int u = 0, len = stoi(s.substr(s.find('/') + 1));
        for (int j=31; j>=0 && len>0; j--, len--) {
            int b = val >> j & 1;
            if (!trie[u][b]) {
                trie[u][b] = (int) trie.size();
                trie.emplace_back();
                cnt.emplace_back();
            }
            u = trie[u][b];
        }
        cnt[u]++;
    }

    auto dfs1 = [&] (auto &self, int u, int len, uint32_t val) -> void {
        if (u == 0 && len > 0)
            return;
        self(self, trie[u][0], len + 1, val << 1);
        self(self, trie[u][1], len + 1, (val << 1) + 1);
        if (cnt[trie[u][0]] > 0 && cnt[trie[u][1]] > 0)
            cnt[u]++;
    };

    auto dfs2 = [&] (auto &self, int u, int len, uint32_t val) -> void {
        if (u == 0 && len > 0)
            return;
        if (cnt[u] > 0) {
            uint32_t cur = val << (32 - len);
            string ret = '/' + to_string(len);
            for (int rep=0; rep<4; rep++) {
                ret = '.' + to_string(cur % 256) + ret;
                cur >>= 8;
            }
            cout << ret.substr(1) << "\n";
            return;
        }
        self(self, trie[u][0], len + 1, val << 1);
        self(self, trie[u][1], len + 1, (val << 1) + 1);
    };

    dfs1(dfs1, 0, 0, 0);
    dfs2(dfs2, 0, 0, 0);

    return 0;
}
