# Converted code
```
def __subclasshook__ ( cls , C ) :
s1 = [ '.-' , '-...' , '-.-.' , '-..' , '.' , '..-.' , '--.' , '....' , '..' , '----' , '-.-' , '--...' , '--' , '-.' , '---.' , '--.-' , '--.-' , '-' , $
..-' , '..--' , '.--' , '-.--' , '--...' ]
translate = C.get ( '__map__' , { } )
s = C.__class__.__name__
mp = C.__members__
words = C.__bases__
dp = C.__subclasshook__ ( s )
rec = C.__subclasshook__ ( s , mp )
if beg != - 1 and dp [ beg ] != 0 :
return dp [ beg ]
for i in range ( beg + 1 , beg + 80 , - 1 ) :
t = mp.get ( s [ beg + 1 : i ] )
if mp.has_key ( s [ beg + 1 : i ] ) :
k = mp [ s [ beg + 1 : i ] ]
ans += k * rec ( i )
if beg != - 1 :
dp [ beg ] = ans
return True
```
```
#include <bits/stdc++.h>
using namespace std;
string s1[100]={".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-",
"-.--", "--.."};
string translate(char c) {
return s1[(long long)(c)-65];
}
string s;
map <string, long long> mp;
string words[100000];
long long dp[100000]={};
long long rec (long long beg) {
long long ans=0;
if (beg!=-1&&dp[beg]!=0)
return dp[beg];
for (long long i=beg+1; i<=beg+80 && i<s.length(); i++) {
long long t=mp.count(s.substr(beg+1,i-beg));
if (mp.count(s.substr(beg+1,i-beg))!=0) {
long long k = mp[s.substr(beg+1,i-beg)];
ans+=k*rec(i);
}
}
if (beg!=-1)
dp[beg]=ans;
return ans;
}
int main()
{
long long n;
cin>>s;
cin>>n;
for (long long i=0; i<n; i++) {
cin>>words[i];
string s2;
for (long long j=0; j<words[i].length(); j++)
s2+=translate(words[i][j]);
mp[s2]+=1;
}
dp[s.length()-1]=1;
cout<<rec(-1);
return 0;
}
```