#include <bits/stdc++.h>
using namespace std;
int par[100005], len;
int n, p, q;
string cm[100005], ct[100005];
map<string, int> M, T;
map<int, bool> ms[100005];
map<int, bool>::iterator it;
string s, t;
int rp;
pair<int, int> res[100005];
struct kk {
  int id;
  vector<int> V;
  bool operator<(const kk &k) const {
    int sa = V.size();
    int sb = (k.V).size();
    for (int i = 0; i < sa && i < sb; i++) {
      if (V[i] > k.V[i]) return false;
      if (V[i] < k.V[i]) return true;
    }
    return sa < sb;
  }
} r[100005];
int main() {
  scanf("%d", &n);
  while (n--) {
    cin >> s;
    len = s.length();
    int sep = len;
    for (int j = (len - 1); j >= (7); j--)
      if (s[j] == '/') sep = j;
    t = "";
    for (int j = (7); j <= (sep - 1); j++) t = t + s[j];
    if (!M.count(t)) {
      M[t] = ++p;
      cm[p] = t;
    }
    int ind = M[t];
    t = "";
    for (int j = (sep); j <= (len - 1); j++) t = t + s[j];
    if (!T.count(t)) {
      T[t] = ++q;
      ct[q] = t;
    }
    int jnd = T[t];
    ms[ind][jnd] = true;
  }
  for (int i = (1); i <= (p); i++) {
    r[i].id = i;
    for (it = ms[i].begin(); it != ms[i].end(); it++) {
      r[i].V.push_back((*it).first);
    }
  }
  sort(r + 1, r + p + 1);
  int pv = 1;
  for (int i = (2); i <= (p); i++) {
    if (r[i - 1] < r[i]) {
      if (pv < i - 1) res[++rp] = make_pair(pv, i - 1);
      pv = i;
    }
  }
  if (pv < p) res[++rp] = make_pair(pv, p);
  printf("%d\n", rp);
  for (int i = (1); i <= (rp); i++) {
    for (int j = (res[i].first); j <= (res[i].second); j++) {
      cout << "http://" << cm[r[j].id];
      printf("%c", j == res[i].second ? '\n' : ' ');
    }
  }
  return 0;
}
