#include <bits/stdc++.h>
using namespace std;
int n;
map<string, int> mid, pid;
std::vector<string> hostname;
vector<int> a[100000];
char s[1000];
int m_total = 0, p_total = 0;
int b[100000];
std::vector<std::vector<int> > ans;
bool cmp(int i, int j) { return a[i] < a[j]; }
int main(int argc, char const *argv[]) {
  scanf("%d", &n);
  for (int i = 0; i < n; ++i) {
    scanf("%s", s);
    int j = 7;
    for (; s[j]; ++j)
      if (s[j] == '/') break;
    string host = "", path = "";
    for (int k = 0; k < j; ++k) host += s[k];
    for (int k = j; s[k]; ++k) path += s[k];
    if (mid.count(host) == 0) {
      mid[host] = m_total++;
      hostname.push_back(host);
    }
    if (pid.count(path) == 0) {
      pid[path] = p_total++;
    }
    a[mid[host]].push_back(pid[path]);
  }
  for (int i = 0; i < m_total; ++i) {
    sort(a[i].begin(), a[i].end());
    a[i].erase(unique(a[i].begin(), a[i].end()), a[i].end());
    b[i] = i;
  }
  sort(b, b + m_total, cmp);
  int l = 0;
  for (int i = 1; i < m_total; ++i) {
    if (a[b[i]] != a[b[l]]) {
      if (i - l > 1) {
        std::vector<int> v;
        v.clear();
        for (int j = l; j < i; ++j) v.push_back(b[j]);
        ans.push_back(v);
      }
      l = i;
    }
  }
  if (m_total - l > 1) {
    std::vector<int> v;
    v.clear();
    for (int j = l; j < m_total; ++j) v.push_back(b[j]);
    ans.push_back(v);
  }
  printf("%d\n", ans.size());
  for (int i = 0; i < ans.size(); ++i) {
    for (int j = 0; j < ans[i].size(); ++j) {
      printf("%s%c", hostname[ans[i][j]].c_str(),
             j < ans[i].size() - 1 ? ' ' : '\n');
    }
  }
  return 0;
}
