#include #include #include #include #include #include using namespace std; typedef pair node; vector ans; bool vis[50]; int V[50]; bool cmp(string s1,string s2){ return s1+s2 tmpAns; for (i=0;i<(1< tmp; for (i=0;i<(1<minsize) continue; string tans2=StInS(i,n,s); if (tans2.empty()) continue; if (ctrl= best) return; if (cover==all) { memcpy(ause, use, sizeof(use)); best = len; return; } if (i==M) return; use[i] = 1; dfs(i+1, len+ans[i].first.length()+1, cover|ans[i].second); use[i] = 0; dfs(i+1, len, cover); } int main(){ int i,s,j,v; int cas=0; for (;;){ scanf("%d",&N); if (N==0) break; for (i=0;i<(1< astr; for (i = 0; i < M; ++i) if (ause[i]) astr.push_back(ans[i].first); sort(astr.begin(), astr.end(), cmp2); string fin = astr[0]; for (i = 1; i < astr.size(); ++i) fin += "+"+astr[i]; cout << fin << '\n'; } return 0; }