#include<bits/stdc++.h>
using namespace std;
#define ALL(x) x.begin(),x.end()
#define rep(i,n) for(int i=0;i<(n);i++)
#define debug(v) cout<<#v<<":";for(auto x:v){cout<<x<<' ';}cout<<endl;
#define mod 1000000007
using ll=long long;
const int INF=1000000000;
const ll LINF=1001002003004005006ll;
int dx[]={1,0,-1,0},dy[]={0,1,0,-1};
// ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
template<class T>bool chmax(T &a,const T &b){if(a<b){a=b;return true;}return false;}
template<class T>bool chmin(T &a,const T &b){if(b<a){a=b;return true;}return false;}
 
struct IOSetup{
    IOSetup(){
        cin.tie(0);
        ios::sync_with_stdio(0);
        cout<<fixed<<setprecision(12);
    }
} iosetup;
 
template<typename T1,typename T2>
ostream &operator<<(ostream &os,const pair<T1,T2>&p){
    os<<p.first<<" "<<p.second;
    return os;
}
 
template<typename T>
ostream &operator<<(ostream &os,const vector<T>&v){
    for(int i=0;i<(int)v.size();i++) os<<v[i]<<(i+1==(int)v.size()?"":" ");
    return os;
}

template<typename T1,typename T2>
istream &operator>>(istream &is,pair<T1,T2>&p){
    is>>p.first>>p.second;
    return is;
}

template<typename T>
istream &operator>>(istream &is,vector<T>&v){
    for(T &x:v)is>>x;
    return is;
}

// 文字種
template<int sz>
struct Trie{
    struct Node{
        int nxt[sz],ex;// 自分以下で受理する文字の数
        vector<int> accept;// このノードが受理するstring ID
        Node():ex(0){memset(nxt,-1,sizeof(nxt));}
    };

    using F=function<int(char)>;
    // converter
    // lower case alphabet -> auto conv=[](char c){return c-'a';};
    // return<sz
    F conv;

    vector<Node> nodes;
    int root;

    Trie(F conv):conv(conv),root(0){nodes.push_back(Node());}

    void update_accept(int node,int id){
        nodes[node].accept.push_back(id);
    }
    void update_child(int node,int child,int id){
        nodes[node].ex++;
    }
    void add(const string &s,int id,int s_idx=0,int node_idx=0){
        if(s_idx==(int)s.size()){
            update_accept(node_idx,id);
            return ;
        }
        int k=conv(s[s_idx]);
        if(nodes[node_idx].nxt[k]==-1){
            nodes[node_idx].nxt[k]=(int)nodes.size();
            nodes.push_back(Node());
        }
        add(s,id,s_idx+1,nodes[node_idx].nxt[k]);
        update_child(node_idx,nodes[node_idx].nxt[k],id);
    }
    void add(const string &s){
        add(s,nodes[0].ex);
    }

    void query(const string &s,const function<void(int)>&f,int s_idx=0,int node_idx=0){
        for(auto &idx:nodes[node_idx].accept)f(idx);
        if(s_idx==(int)s.size()) return ;
        else {
            int k=conv(s[s_idx]);
            if(nodes[node_idx].nxt[k]==-1)return;
            query(s,f,s_idx+1,nodes[node_idx].nxt[k]);
        }
    }
    bool search(const string &s){
        int node_idx=0;
        for(int i=0;i<(int)s.size();i++){
            int k=conv(s[i]);
            if(nodes[node_idx].nxt[k]==-1) return false;
            node_idx=nodes[node_idx].nxt[k];
        }
        return nodes[node_idx].accept.size()>0;
    }
    int count()const{
        return (nodes[0].ex);
    }
    int size()const{
        return ((int)nodes.size());
    }
    // 問題に応じて書く
    // AGC047-B
    // s[0~i][j]みたいなのだけ許すcount
    void f(const string &s,ll &res){
        int cnt[26]={};
        for(auto &c:s)cnt[conv(c)]++;
        int node_idx=0;
        for(int i=0;i<(int)s.size();i++){
            int c=conv(s[i]);
            rep(j,26)if(cnt[j]){
                int ni=nodes[node_idx].nxt[j];
                if(ni>=0) res+=nodes[ni].accept.size();
            }
            if(nodes[node_idx].nxt[c]==-1) return ;
            node_idx=nodes[node_idx].nxt[c];
            cnt[c]--;
        }
    }
};


signed main(){
    int n;cin>>n;
    vector<string> ss(n);
    cin>>ss;
    for(auto &s:ss)reverse(ALL(s));
    sort(ALL(ss),[](string a,string b){
        return a.size()<b.size();
    });

    auto converter=[&](char c){return int(c-'a');};
    Trie<26> trie(converter);

    ll res=0;
    for(auto &s:ss){
        trie.f(s,res);
        trie.add(s);
    }
    cout<<res<<endl;
    return 0;
}


Measured memory_bytes: 349116