#include <bits/stdc++.h>
using namespace std;
const int oo = 0x3f3f3f3f;
bool cmp(pair<long long, pair<long long, long long>> a,
         pair<long long, pair<long long, long long>> b) {
  if (a.second.first != b.second.first) return a.second.first < b.second.first;
  if (a.second.second != b.second.second)
    return a.second.second > b.second.second;
  return a.first < b.first;
}
string convert(long long lo, long long hi) {
  string ans = "";
  long long count = 0;
  long long LO = lo, HI = hi;
  while (LO != HI) {
    count++;
    LO /= 2;
    HI /= 2;
  }
  long long back = 32 - count;
  LO = LO << count;
  HI = HI << count;
  long long d = LO % 256;
  LO /= 256;
  long long c = LO % 256;
  LO /= 256;
  long long b = LO % 256;
  LO /= 256;
  long long a = LO % 256;
  string aux = "";
  if (a == 0) {
    aux += "0";
  } else {
    while (a != 0) {
      aux += (char)(a % 10 + '0');
      a /= 10;
    }
  }
  reverse(aux.begin(), aux.end());
  ans += aux;
  ans += ".";
  aux = "";
  if (b == 0) {
    aux += "0";
  } else {
    while (b != 0) {
      aux += (char)(b % 10 + '0');
      b /= 10;
    }
  }
  reverse(aux.begin(), aux.end());
  ans += aux;
  ans += ".";
  aux = "";
  if (c == 0) {
    aux += "0";
  } else {
    while (c != 0) {
      aux += (char)(c % 10 + '0');
      c /= 10;
    }
  }
  reverse(aux.begin(), aux.end());
  ans += aux;
  ans += ".";
  aux = "";
  if (d == 0) {
    aux += "0";
  } else {
    while (d != 0) {
      aux += (char)(d % 10 + '0');
      d /= 10;
    }
  }
  reverse(aux.begin(), aux.end());
  ans += aux;
  ans += "/";
  aux = "";
  if (back == 0) {
    aux += "0";
  } else {
    while (back != 0) {
      aux += (char)(back % 10 + '0');
      back /= 10;
    }
  }
  reverse(aux.begin(), aux.end());
  ans += aux;
  return ans;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  int n;
  cin >> n;
  vector<pair<long long, pair<long long, long long>>> segments(n);
  vector<pair<long long, pair<long long, long long>>> events;
  vector<pair<long long, pair<long long, long long>>> segs;
  for (int i = 0; i < n; i++) {
    string s;
    cin >> s;
    char c = s[0];
    long long num = 0LL, cur = 0LL;
    bool slash = false;
    for (int i = 1; i < (int)s.size(); i++) {
      if (s[i] >= '0' && s[i] <= '9') {
        cur = (cur * 10LL + (s[i] - '0'));
      }
      if (s[i] == '.') {
        num <<= 8LL;
        num += cur;
        cur = 0;
      }
      if (s[i] == '/') {
        slash = true;
        num <<= 8LL;
        num += cur;
        cur = 0;
      }
    }
    if (!slash) {
      num <<= 8LL;
      num += cur;
    }
    long long lo = num, hi = num;
    if (slash) {
      long long mask = 1LL << 32;
      mask--;
      long long nmask = 1LL << (32 - cur);
      nmask--;
      mask ^= nmask;
      lo = lo & mask;
      hi = (hi & mask) + nmask;
    }
    events.push_back({lo, {+1, c == '+' ? 1 : 0}});
    events.push_back({hi + 1, {-1, c == '+' ? 1 : 0}});
    segs.push_back({c == '+' ? 1 : 0, {lo, hi}});
  }
  sort(events.begin(), events.end());
  sort(segs.begin(), segs.end(), cmp);
  long long acc = 0, rej = 0;
  bool ok = true;
  for (auto ev : events) {
    if (ev.second.second == 1) {
      if (ev.second.first == 1) {
        acc++;
        if (acc && rej) {
          ok = false;
          break;
        }
      } else {
        --acc;
      }
    } else {
      if (ev.second.first == 1) {
        rej++;
        if (acc && rej) {
          ok = false;
          break;
        }
      } else {
        --rej;
      }
    }
  }
  if (!ok) {
    cout << -1 << '\n';
    return 0;
  }
  vector<pair<long long, pair<long long, long long>>> real;
  long long last_acc = -1, last_rej = -1;
  for (long long i = 0; i < (long long)segs.size(); i++) {
    if (segs[i].first == 1) {
      if (last_acc != -1) {
        if (!(segs[i].second.first >= segs[last_acc].second.first &&
              segs[i].second.second <= segs[last_acc].second.second)) {
          last_acc = i;
          real.push_back(segs[i]);
        }
      } else {
        last_acc = i;
        real.push_back(segs[i]);
      }
    } else {
      if (last_rej != -1) {
        if (!(segs[i].second.first >= segs[last_rej].second.first &&
              segs[i].second.second <= segs[last_rej].second.second)) {
          last_rej = i;
          real.push_back(segs[i]);
        }
      } else {
        last_rej = i;
        real.push_back(segs[i]);
      }
    }
  }
  vector<long long> l(real.size(), -1), r(real.size(), -1);
  long long last = -1;
  for (long long i = 0; i < (long long)real.size(); i++) {
    if (real[i].first == 1) {
      last = i;
    } else {
      l[i] = last;
    }
  }
  last = -1;
  for (long long i = (long long)real.size() - 1; i >= 0; i--) {
    if (real[i].first == 1) {
      last = i;
    } else {
      r[i] = last;
    }
  }
  vector<pair<long long, long long>> ans;
  for (int i = 0; i < (int)real.size(); i++) {
    auto s = real[i];
    if (s.first == 0) {
      long long lo = s.second.first, hi = s.second.second;
      long long count = 1;
      while (count < 33) {
        lo = (1LL * lo) >> count;
        lo = (1LL * lo) << count;
        hi = (1LL * hi) >> count;
        hi = (1LL * hi) << count;
        hi += (1LL << count) - 1;
        if (l[i] != -1 && real[l[i]].second.second >= lo) break;
        if (r[i] != -1 && real[r[i]].second.first <= hi) break;
        ++count;
      }
      lo = s.second.first, hi = s.second.second;
      lo = (1LL * lo) >> (count - 1);
      lo = (1LL * lo) << (count - 1);
      hi = (1LL * hi) >> (count - 1);
      hi = (1LL * hi) << (count - 1);
      hi += (1LL << (count - 1)) - 1;
      if ((!ans.empty()) &&
          ((ans.back().second >= hi) && (ans.back().first <= lo)))
        continue;
      ans.push_back({lo, hi});
    }
  }
  cout << ans.size() << '\n';
  for (auto ev : ans) cout << convert(ev.first, ev.second) << '\n';
  return 0;
}
