#include<bits/stdc++.h>
#define fi first
#define se second
#define int long long
using namespace std;
;
map<char,string> mp;
map<string,char> pm;
struct pos
{
char x;
int num;
pos *father=NULL;
pos *lson=NULL;
pos *rson=NULL;
pos *p=NULL;
friend bool operator < (pos a, pos b)
{
return a.num > b.num; //重载小于号使得小的先出队列
}
}tree[maxn];
void make_DFS(pos &root,string ss)
{
if(root.lson==NULL && root.rson==NULL)
{
//cout<<root.x<<endl;
mp[root.x]=ss;
pm[ss]=root.x;
}
else
{
make_DFS(*root.lson,ss+");
make_DFS(*root.rson,ss+");
}
}
void build_tree(pos &root)
{
priority_queue<pos> qu; // pos 结构体
;i<=;i++)
{
qu.push(tree[i]);
}
while(!qu.empty())
{
pos *qq;
qq=qu.top().p;
qu.pop();
pos *pp;
pp=qu.top().p;
qu.pop();
)
{
root.lson=pp;
root.rson=qq;
break;
}
(*pp).father=new pos;
pos *x=(*pp).father;
(*x).lson=pp;
(*x).rson=qq;
(*x).x='*';
(*x).num=(*pp).num+(*qq).num;
//cout<<(*x).num<<endl;
(*x).p=&(*x);
qu.push(*x);
}
//cout<<"make tree OK"<<endl;
make_DFS(root,"");
}
int32_t main()
{
freopen("tree.txt","r",stdin);
tree[].x=' ';
;i<=;i++) cin>>tree[i].x;
;i<=;i++) cin>>tree[i].num;
;i<=;i++) tree[i].p=&tree[i];
pos root;
build_tree(root);
;i<=;i++)
{
cout<<tree[i].x<<" "<<tree[i].num<<" "<<mp[tree[i].x]<<" "<<pm[mp[tree[i].x]]<<endl;
}
];
getchar();gets(a); cout<<a<<endl; int l=strlen(a);
cout<<;i<l;i++)cout<<mp[a[i]];cout<<endl;
gets(a); cout<<a<<endl; l=strlen(a);
cout<<;i<l;i++)cout<<mp[a[i]];cout<<endl;
gets(a); cout<<a<<endl; l=strlen(a);
cout<<;i<l;i++)cout<<mp[a[i]];cout<<endl;
cout<<"----------------------------------------"<<endl;
gets(a); cout<<a<<endl; l=strlen(a); cout<<"译码"<<endl; string ss="";
;i<l;i++)
{
ss=ss+a[i];
if(pm[ss]==' '|| (pm[ss]>='A'&&pm[ss]<='Z'))
{
cout<<pm[ss]; ss="";
}
}cout<<endl;
gets(a); cout<<a<<endl; l=strlen(a); cout<<"译码"<<endl; ss="";
;i<l;i++)
{
ss=ss+a[i];
if(pm[ss]==' '|| (pm[ss]>='A'&&pm[ss]<='Z'))
{
cout<<pm[ss]; ss="";
}
}cout<<endl;
gets(a); cout<<a<<endl; l=strlen(a); cout<<"译码"<<endl; ss="";
;i<l;i++)
{
ss=ss+a[i];
if(pm[ss]==' '|| (pm[ss]>='A'&&pm[ss]<='Z'))
{
cout<<pm[ss]; ss="";
}
}cout<<endl;
}