??? {?
????????? k=1-k;?
????????? memset(dp[k],-1,sizeof(dp[k]));??
????????? for (i=0;i
??????????????? if (dp[1-k][j][p]!=-1)?
??????????????? {?
?????????????????????? x=point[need[i]].w|p;?
?????????????????????? if (dp[k][i][x]==-1 || dp[k][i][x]>dp[1-k][j][p]+arc[j][i])?
????????????????????????? dp[k][i][x]=dp[1-k][j][p]+arc[j][i];?
??????????????? }?
??? }?
??? ans=oo;?
}?
int main()?
{??
??? while (~scanf("%d",&n))?
??? {?
??????????? if (!n) break;?
??????????? Built_Trie();?
??????????? Built_AC_Automation();?
??????????? Built_Arc();??
??????????? printf("%d\n",EXE_DP());?
??? }?
??? return 0;?
}?