#include <bits/stdc++.h>
using namespace std;
int n;
map<string, int> mp;
map<int, string> pm;
vector<string> gg;
pair<string, string> parseURI(const string &s) {
  int sz = (int)s.size();
  int ind = 0, cnt = 0;
  string ff, ss;
  while (ind < sz) {
    if (s[ind] == '/') cnt++;
    if (cnt == 3) break;
    ff.push_back(s[ind]);
    ind++;
  }
  while (ind < sz) {
    ss.push_back(s[ind]);
    ind++;
  }
  return {ff, ss};
}
vector<string> inp;
vector<int> px;
bool cmp(int i, int j) { return gg[i] < gg[j]; }
vector<string> ans;
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> n;
  inp.resize(n);
  pair<string, string> pp;
  int ind;
  for (int i = 0; i < n; i++) cin >> inp[i];
  sort(inp.begin(), inp.end());
  inp.resize(unique(inp.begin(), inp.end()) - inp.begin());
  for (int i = 0; i < (int)inp.size(); i++) {
    pp = parseURI(inp[i]);
    if (mp.count(pp.first))
      ind = mp[pp.first];
    else {
      ind = (int)gg.size();
      gg.push_back("");
      mp[pp.first] = ind;
      pm[ind] = pp.first;
    }
    gg[ind] += ("#" + pp.second);
  }
  for (int i = 0; i < (int)gg.size(); i++) px.push_back(i);
  sort(px.begin(), px.end(), cmp);
  int a, b;
  bool flag;
  for (int i = 1; i < (int)px.size(); i++) {
    a = px[i - 1];
    b = px[i];
    flag = (gg[a] == gg[b]);
    if (flag) ans.push_back(pm[a]);
    while (i < (int)px.size() && flag) {
      ans.back() += (" " + pm[b]);
      i++;
      if (i >= (int)px.size()) break;
      a = px[i - 1];
      b = px[i];
      flag = (gg[a] == gg[b]);
    }
  }
  cout << (int)ans.size() << "\n";
  for (int i = 0; i < (int)ans.size(); i++) cout << ans[i] << "\n";
  return 0;
}
