// @EXPECTED_RESULTS@: RUN_TIME_ERROR, WRONG_ANSWER import java.util.Arrays; import java.util.Scanner; class Pair { int lower; int higher; String prefix; public Pair(int lower, int higher, String prefix) { this.lower = lower; this.higher = higher; this.prefix = prefix; } } public class NickyEnMarkNoSharedPaths { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); String[] s = new String[n]; for (int i = 0; i < n; i++) { s[i] = scanner.next(); } Arrays.sort(s); int maxSlashes = 0; String[][] ss = new String[n][]; for (int i = 0; i < n; i++) { ss[i] = s[i].substring(1).split("/"); maxSlashes = Math.max(maxSlashes, ss[i].length); } StringBuilder fullPrefix = new StringBuilder(); Pair p = new Pair(0, n - 1, ""); int numPrevSlashes = 0; while (p.higher - p.lower + 1 > n / 2 && numPrevSlashes < maxSlashes) { p = calc(ss, p, numPrevSlashes); numPrevSlashes++; if (p.higher - p.lower + 1 > n / 2) { fullPrefix.append("/").append(p.prefix); } } String prefix = fullPrefix.toString(); String[] prefixSplit; if (prefix.isEmpty()) { prefixSplit = new String[0]; } else { prefixSplit = prefix.substring(1).split("/"); } int c = 0; for (int i = 0; i < n; i++) { c += numDifferentParts(prefix, prefixSplit, s[i], ss[i]); } System.out.println(c); } private static Pair calc(String[][] ss, Pair currentPair, int numPreviousSlashes) { int maxCounter = 0; String current = ""; String p = ""; int currentCounter = 0; int currentStart = 0; int start = 0; int end = 0; for (int i = currentPair.lower; i <= currentPair.higher; i++) { if (ss[i][numPreviousSlashes].equals(current)) { currentCounter++; } else { current = ss[i][numPreviousSlashes]; currentCounter = 1; currentStart = i; } if (currentCounter > maxCounter) { maxCounter = currentCounter; end = i; start = currentStart; p = current; } } return new Pair(start, end, p); } private static String upTo(String s, int slashes) { String[] parts = s.substring(1).split("/"); StringBuilder sb = new StringBuilder(); for (int i = 0; i < slashes; i++) { if (i < parts.length) { sb.append("/").append(parts[i]); } } return sb.toString(); } private static int numDifferentParts(String prefix, String[] prefixSplit, String s, String[] sSplit) { if (prefix.equals(s)) { return 0; } else if (s.startsWith(prefix)) { return s.substring(prefix.length() + 1).split("/").length; } else { boolean same = true; int c = 0; for (int i = 0; i < Math.max(prefixSplit.length, sSplit.length) - 1; i++) { if (i >= prefixSplit.length || i >= sSplit.length - 1) { c += 1; } else if (!prefixSplit[i].equals(sSplit[i]) && same) { same = false; c += 2; } else if (!same) { c += 2; } } return c; } } }