class Solution { public: vector<int> solve(int N, vector<string> &S, int Q, vector<string> &Query) { // code here vector<int> dp(1<<21,N+5),ans; for(int i=0;i<N;i++){ vector<int> freq(26,0); for(auto it:S[i]){ freq[it-'a']=1; } int num=0; for(int j=0;j<20;j++){ num+=(freq[j]*(1<<j)); } dp[num]=min(dp[num],i); } for(int i=(1<<21)-1;i>=0;i--){ for(int j=0;j<20;j++){ if(i&(1<<j)){ int y=i^(1<<j); dp[y]=min(dp[y],dp[i]); } } if(dp[i]>N){ dp[i]=-1; } } for(auto it:Query){ int num=0; for(auto i:it){ int d=i-'a'; num|=(1<<d); } ans.push_back(dp[num]); } return ans; } };