# 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; } ```