poj 1409(水题)


#include
#include
#include
using namespace std;
struct node{
    char result[305][55];
    int len;
};
node r[305];
char a[105][55],sequence[305],seqCh[305][55];
int rCnt,cnt,n,d[] = {2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,7,7,7,8,8,8,9,9,9,9};
bool flag;
int cmp(node ra,node rb){
    int len = min(ra.len,rb.len);
    for(int i=0;i){
        if(strcmp(ra.result[i],rb.result[i])<0)return true;
        if(strcmp(ra.result[i],rb.result[i])>0)return false;
    }
}
void dfs(int p,int q){
    if(p==q){
        r[rCnt].len = cnt;
        for(int i=0;i){
            strcpy(r[rCnt].result[i],seqCh[i]);
        }
        rCnt++;
    }
    for(int i=0;i){
        flag = true;
        for(int j=0;j){
            if(sequence[p+j]!=d[a[i][j]-'a']+'0'){
                flag = false;
                break;
            }
        }
        if(flag){
            strcpy(seqCh[cnt++],a[i]);
            dfs(p+strlen(a[i]),q);
            cnt--;
        }
    }
}
int main(){
    while(scanf("%d",&n)==1&&n){
        for(int i=0;i){
            scanf("%s",a[i]);
        }
        scanf("%s",sequence);
//        for(int i=0;i//            for(int j=0;j//                cout<//            }
//            cout<//        }
        rCnt = 0;
        dfs(0,strlen(sequence));
        sort(r,r+rCnt,cmp);
        for(int i=0;i){
            for(int j=0;j1;j++){
                cout<" ";
            } 
            cout<1]<<"."<<endl;
        }
        cout<<"--"<<endl;
    }
    return 0;
}