#include <bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f, mod = 1e9 + 7;
const int maxn = 1e5 + 100;
const long double PI = acos(-1.0);
long long gcd(long long a, long long b) { return (a ? gcd(b % a, a) : b); }
long long power(long long a, long long n) {
  long long p = 1;
  while (n > 0) {
    if (n % 2) {
      p = p * a;
    }
    n >>= 1;
    a *= a;
  }
  return p;
}
long long power(long long a, long long n, long long mod) {
  long long p = 1;
  while (n > 0) {
    if (n % 2) {
      p = p * a;
      p %= mod;
    }
    n >>= 1;
    a *= a;
    a %= mod;
  }
  return p % mod;
}
int n, m;
set<string>::iterator it1, it2;
struct veg {
  int x;
  string t;
  set<string> pa;
  bool operator<(const veg& a) const {
    if (pa.size() != a.pa.size()) return pa.size() < a.pa.size();
    for (it1 = pa.begin(), it2 = a.pa.begin(); it1 != pa.end(); it1++, it2++) {
      if (*it1 != *it2) return *it1 < *it2;
    }
    return pa.size() < a.pa.size();
  }
} ve[maxn];
int has(char c) {
  if (c == '.')
    return 26;
  else
    return c - 'a';
}
struct tr {
  int tag;
  int ne[30];
} wo[2000005];
int all, cun;
void inse(char s[70]) {
  int len = strlen(s), d = 0, k = len;
  string ss = "", tt = "http://";
  for (int i = 7; i < len; i++) {
    if (s[i] == '/') {
      k = i;
      break;
    }
    tt = tt + s[i];
    int g = has(s[i]);
    if (wo[d].ne[g] == 0) {
      all++;
      memset(wo[all].ne, 0, sizeof(wo[all].ne));
      wo[all].tag = -1;
      wo[d].ne[g] = all;
    }
    d = wo[d].ne[g];
  }
  if (wo[d].tag == -1) {
    wo[d].tag = cun++;
    ve[wo[d].tag].pa.clear();
    ve[wo[d].tag].t = tt;
  }
  for (int i = k; i < len; i++) ss = ss + s[i];
  if (ss == "") ss = ss + '#';
  ve[wo[d].tag].pa.insert(ss);
  return;
}
int ff[maxn];
int main() {
  while (cin >> n) {
    all = 0;
    cun = 0;
    memset(wo[0].ne, 0, sizeof(wo[0].ne));
    wo[0].tag = -1;
    char gg[70];
    for (int i = 1; i <= n; i++) {
      scanf("%s", gg);
      inse(gg);
    }
    sort(ve, ve + cun);
    memset(ff, 0, sizeof(ff));
    int ans = 1, kk = 0;
    for (int i = 1; i < cun; i++) {
      int flv = 1;
      if (ve[i].pa.size() != ve[i - 1].pa.size()) flv = 0;
      if (flv == 1)
        for (it1 = ve[i].pa.begin(), it2 = ve[i - 1].pa.begin();
             it1 != ve[i].pa.end(); it1++, it2++)
          if (*it1 != *it2) {
            flv = 0;
            break;
          }
      if (flv == 0) {
        if (ans >= 2) {
          ff[i - 1] = ans;
          kk++;
        }
        ans = 1;
      } else
        ans++;
    }
    if (ans >= 2) {
      ff[cun - 1] = ans;
      kk++;
    }
    cout << kk << endl;
    for (int i = 0; i < cun; i++) {
      if (ff[i] != 0) {
        for (int j = i; j >= i - ff[i] + 1; j--) cout << ve[j].t << " ";
        cout << endl;
      }
    }
  }
  return 0;
}
