#include <bits/stdc++.h>
using namespace std;
char _buf[1 << 16];
int _p = 0, _l = 0;
void _readbuf() {
  cin.read(_buf, 1 << 16);
  _l = cin.gcount();
  _p = 0;
}
bool _eof() {
  if (_p < _l) return false;
  _readbuf();
  return _p == _l;
}
char _nextc() {
  if (_p < _l) return _buf[_p++];
  if (cin.eof()) throw 1;
  _readbuf();
  if (_p < _l) return _buf[_p++];
  throw 2;
}
string nexttoken() {
  string s = "";
  while (!_eof()) {
    char c = _nextc();
    if (c == ' ' || c == '\r' || c == '\n' || c == '\t') continue;
    s += c;
    while (!_eof()) {
      c = _nextc();
      if (c == ' ' || c == '\r' || c == '\n' || c == '\t') break;
      s += c;
    }
    break;
  }
  return s;
}
string nextline() {
  string s = "";
  while (!_eof()) {
    char c = _nextc();
    if (c == '\r' || c == '\n') continue;
    s += c;
    while (!_eof()) {
      c = _nextc();
      if (c == '\r' || c == '\n') break;
      s += c;
    }
    break;
  }
  return s;
}
int nextint() {
  string s = nexttoken();
  if (s == "") throw 3;
  bool minus = s[0] == '-';
  long long res = 0;
  for (size_t i = minus ? 1 : 0; i < s.length(); i++) {
    if (s[i] < '0' || s[i] > '9') throw 4;
    res = 10 * res + s[i] - '0';
  }
  if (minus) res = -res;
  if (res > 2147483647LL || res < -2147483648LL) throw 5;
  return (int)res;
}
long long nextlong() {
  string s = nexttoken();
  if (s == "") throw 3;
  bool minus = s[0] == '-';
  long long res = 0;
  for (size_t i = minus ? 1 : 0; i < s.length(); i++) {
    if (s[i] < '0' || s[i] > '9') throw 4;
    res = 10 * res + s[i] - '0';
  }
  if (minus) res = -res;
  return res;
}
double nextdouble() {
  string s = nexttoken();
  if (s == "") throw 5;
  double res = 0;
  bool minus = s[0] == '-';
  bool haveDigits = false;
  bool decimalSeparatorFound = false;
  size_t i;
  for (i = minus ? 1 : 0; i < s.length(); i++) {
    if (s[i] == '.' || s[i] == ',') {
      decimalSeparatorFound = true;
      ++i;
      break;
    }
    if (s[i] < '0' || s[i] > '9') throw 7;
    res = 10 * res + s[i] - '0';
    haveDigits = true;
  }
  if (decimalSeparatorFound) {
    long long p = 0, q = 1;
    int len = 0;
    for (; i < s.length(); i++) {
      if (s[i] < '0' || s[i] > '9') throw 8;
      haveDigits = true;
      if (++len < 17) {
        p = 10 * p + s[i] - '0';
        q *= 10LL;
      }
    }
    if (len > 0) {
      res += (double)p / q;
    }
  }
  if (!haveDigits) {
    throw 9;
  }
  return minus ? -res : res;
}
template <typename T>
void write(T x) {
  cout << x;
}
template <>
void write(double x) {
  cout << fixed << x;
}
template <typename T>
void writeln(T x) {
  write(x);
  cout << '\n';
}
map<string, set<string>> ss;
map<set<string>, vector<string>> ww;
vector<vector<string>> res;
void solve() {
  int n = nextint();
  for (size_t i = 0; i < n; i++) {
    string s = nexttoken();
    int p = s.find('/', 7);
    string path, host;
    if (p == -1) {
      path = "";
      host = s;
    } else {
      path = s.substr(p);
      host = s.substr(0, p);
    }
    ss[host].insert(path);
  }
  for (auto& u : ss) {
    ww[u.second].push_back(u.first);
  }
  for (auto& u : ww) {
    if (u.second.size() > 1) {
      res.push_back(u.second);
    }
  }
  writeln(res.size());
  for (auto& v : res) {
    for (auto& u : v) {
      write(u);
      write(" ");
    }
    writeln("");
  }
}
int main() {
  cin.sync_with_stdio(false);
  cin.tie(nullptr);
  cout.precision(10);
  solve();
  return 0;
}
