代码如下:
```cpp
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
string s[55];
int n , f[55][55];
long long dp[55];//2^50次方在longlong以内
int Compare(int x , int y) {
if(s[x].length() > s[y].length()) swap(x , y);
for (unsigned i = 0; i < s[x].length(); ++i) {
if(s[x][i] != s[y][i]) return 1;
}
return 0;
}
int main() {
scanf("%d" , &n);
for (int i = 1; i <= n; ++i) cin >> s[i] , dp[i] = 1;//输入与初始化
sort(s + 1 , s + 1 + n);
long long ans = 1;
for (int i = 2; i <= n; ++i) for (int j = i - 1; j >= 0; --j) if(Compare(i , j)) dp[i] += dp[j];//dp转移
for (int i = 1; i <= n; ++i) ans += dp[i];//统计答案
printf("%lld" , ans);
return 0;
}
```