#include <bits/stdc++.h>
using namespace std;
const long long maxn = 1e5 + 5;
struct TrieNode {
  long long s[30];
};
long long tot = 1, las[maxn], slen[maxn];
TrieNode t[maxn];
vector<long long> pos[maxn];
long long dep[maxn];
void ins(const char *ch, long long idx) {
  long long len = strlen(ch + 1);
  long long now = 1;
  for (int i = 1; i <= len; i++) {
    long long c = ch[i] - 'a';
    if (!t[now].s[c]) {
      t[now].s[c] = ++tot;
      dep[t[now].s[c]] = dep[now] + 1;
    }
    now = t[now].s[c];
    pos[now].push_back(idx);
  }
  las[now] = idx;
  return;
}
priority_queue<long long> pq[maxn];
long long sz[maxn];
void dfs(long long now) {
  for (int i = 0; i < 26; i++) {
    long long tr = t[now].s[i];
    if (!tr) continue;
    dfs(tr);
    if (sz[now] < sz[tr]) swap(pq[now], pq[tr]);
    while (!pq[tr].empty()) {
      long long num = pq[tr].top();
      pq[tr].pop();
      pq[now].push(num);
    }
    sz[now] += sz[tr];
  }
  if (las[now]) {
    pq[now].push(dep[now]);
    sz[now]++;
  } else if (!pq[now].empty() && now != 1) {
    pq[now].pop();
    pq[now].push(dep[now]);
  }
  return;
}
long long n;
char s[maxn];
bool cmp2(long long x, long long y) { return slen[x] < slen[y]; }
int main() {
  scanf("%lld", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%s", s + 1);
    ins(s, i);
    slen[i] = strlen(s + 1);
  }
  dfs(1);
  long long ans = 0;
  while (!pq[1].empty()) {
    ans += pq[1].top();
    pq[1].pop();
  }
  printf("%lld\n", ans);
  return 0;
}
