#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void Read(T &x) {
  int f = 1;
  char t = getchar();
  while (t < '0' || t > '9') {
    if (t == '-') f = -1;
    t = getchar();
  }
  x = 0;
  while (t >= '0' && t <= '9') {
    x = x * 10 + t - '0';
    t = getchar();
  }
  x *= f;
}
template <class T>
inline void chkmin(T &x, T y) {
  if (x > y) x = y;
}
template <class T>
inline void chkmax(T &x, T y) {
  if (x < y) x = y;
}
const int maxn = 100005;
int n;
string str[maxn];
string domain[maxn];
int sz;
map<string, int> id;
pair<vector<string>, int> paths[maxn];
int getid(string &res) {
  if (id.count(res))
    return id[res];
  else {
    domain[++sz] = res;
    return id[res] = sz;
  }
}
void input() {
  ios::sync_with_stdio(false);
  cin >> n;
  for (int i = 1; i <= n; i++) cin >> str[i];
}
string getdomain(string &res, int &loc) {
  int cur = 0;
  int cnt = 0;
  while (cnt < 2) {
    if (res[cur] == '/') cnt++;
    cur++;
  }
  while (cur < (int)res.size() && res[cur] != '/') cur++;
  loc = cur;
  return res.substr(0, cur);
}
string getpath(string &res, int cur) {
  if (cur == (int)res.size())
    return "";
  else
    return res.substr(cur, (int)res.size() - cur);
}
void solve() {
  string dom;
  string path;
  int idnow;
  int loc;
  for (int i = 1; i <= n; i++) {
    dom = getdomain(str[i], loc);
    idnow = getid(dom);
    path = getpath(str[i], loc);
    paths[idnow].first.push_back(path);
  }
  for (int i = 1; i <= sz; i++) {
    sort(paths[i].first.begin(), paths[i].first.end());
    paths[i].first.erase(unique(paths[i].first.begin(), paths[i].first.end()),
                         paths[i].first.end());
  }
  for (int i = 1; i <= sz; i++) paths[i].second = i;
  sort(paths + 1, paths + sz + 1);
  static vector<pair<int, int> > output;
  for (int i = 2, last = 1; i <= sz; i++) {
    if (paths[i].first != paths[i - 1].first) {
      if (i - last > 1) {
        output.push_back(make_pair(last, i - 1));
      }
      last = i;
    }
    if (i == sz && i - last + 1 > 1) {
      output.push_back(make_pair(last, i));
    }
  }
  cout << output.size() << endl;
  for (int i = 0; i < (int)output.size(); i++) {
    int l = output[i].first;
    int r = output[i].second;
    for (int j = l; j <= r; j++) cout << domain[paths[j].second] << " ";
    cout << endl;
  }
}
int main() {
  input();
  solve();
  return 0;
}
