# include <stdio.h>
# define N 201
char A[][7]={"apple","banana","orange"}; //A->B
char B[][5]={"miss","love","kiss"};
int S[]={4,5,5},num,D[2][N];
char C[N];
int BF(char a[],char b[],int c[]);//返回b字符串在a中的个数 c存储b在a中的下标 从c[num]开始存储 num为全局变量
void change(int *a,int *b);//交换函数
void Qsort(int A[][N],int left,int right);//快速排序 升序
int main(){
int i,j,k;
//freopen("AAA.txt","r",stdin);
while(gets(C)){
for(i=j=num=0;i<3;i++)//用 A[i]匹配C 返回匹配的个数
{
k=BF(C,A[i],D[0]);//k记录A[i]匹配的个数
while(k--)D[1][j++]=i;//D[1]用来存储i
}
Qsort(D,0,num-1);//以A[0]升序 从下标0--- num-1 一共num个
for(i=j=0;C[i];i++){//输出
if(i==D[0][j]&&j<num)
{
printf("%s",B[D[1][j]]);
i+=S[D[1][j++]];
}
else printf("%c",C[i]);
}
printf("\n");//输出回车符
}
return 0;
}
int BF(char a[],char b[],int c[]){//返回b字符串在a中的个数 c存储b在a中的下标 从c[num]开始存储 num为全局变量
int i=0,j=0,k=num;//k存储当前已经匹配的个数
do{
if (b[j]&&a[i++]==b[j])++j;//如果匹配成功 继续向下匹配
else
{
b[j]?(i-=j):(c[num++]=i-j);//b字符串到头了吗?如果到头了即b[j]=0 此时 c存储匹配下标 否则i回溯
j=0;//无论匹配成功与否 b都要重新和a检测
}
}while(a[i-1]);
return num-k;//返回b在a中匹配的个数
}
void change(int *a,int *b){//交换函数 交换a b的值
int c=*a;
*a=*b;
*b=c;
}
void Qsort(int A[][N],int left,int right)//不需要知道内部 只需要知道是升序就行了
{
int i=left,j=right,temp=A[0][left];
if(left>=right) return;
while(i!=j)
{
while(A[0][j]>=temp && i<j) j--;
while(A[0][i]<=temp && i<j)i++;
if(i<j)
{
change(&A[0][i],&A[0][j]);
change(&A[1][i],&A[1][j]);
}
}
change(&A[0][left],&A[0][i]);
change(&A[1][left],&A[1][i]);
Qsort(A,left,i-1);
Qsort(A,i+1,right);
}
# define N 201
char A[][7]={"apple","banana","orange"}; //A->B
char B[][5]={"miss","love","kiss"};
int S[]={4,5,5},num,D[2][N];
char C[N];
int BF(char a[],char b[],int c[]);//返回b字符串在a中的个数 c存储b在a中的下标 从c[num]开始存储 num为全局变量
void change(int *a,int *b);//交换函数
void Qsort(int A[][N],int left,int right);//快速排序 升序
int main(){
int i,j,k;
//freopen("AAA.txt","r",stdin);
while(gets(C)){
for(i=j=num=0;i<3;i++)//用 A[i]匹配C 返回匹配的个数
{
k=BF(C,A[i],D[0]);//k记录A[i]匹配的个数
while(k--)D[1][j++]=i;//D[1]用来存储i
}
Qsort(D,0,num-1);//以A[0]升序 从下标0--- num-1 一共num个
for(i=j=0;C[i];i++){//输出
if(i==D[0][j]&&j<num)
{
printf("%s",B[D[1][j]]);
i+=S[D[1][j++]];
}
else printf("%c",C[i]);
}
printf("\n");//输出回车符
}
return 0;
}
int BF(char a[],char b[],int c[]){//返回b字符串在a中的个数 c存储b在a中的下标 从c[num]开始存储 num为全局变量
int i=0,j=0,k=num;//k存储当前已经匹配的个数
do{
if (b[j]&&a[i++]==b[j])++j;//如果匹配成功 继续向下匹配
else
{
b[j]?(i-=j):(c[num++]=i-j);//b字符串到头了吗?如果到头了即b[j]=0 此时 c存储匹配下标 否则i回溯
j=0;//无论匹配成功与否 b都要重新和a检测
}
}while(a[i-1]);
return num-k;//返回b在a中匹配的个数
}
void change(int *a,int *b){//交换函数 交换a b的值
int c=*a;
*a=*b;
*b=c;
}
void Qsort(int A[][N],int left,int right)//不需要知道内部 只需要知道是升序就行了
{
int i=left,j=right,temp=A[0][left];
if(left>=right) return;
while(i!=j)
{
while(A[0][j]>=temp && i<j) j--;
while(A[0][i]<=temp && i<j)i++;
if(i<j)
{
change(&A[0][i],&A[0][j]);
change(&A[1][i],&A[1][j]);
}
}
change(&A[0][left],&A[0][i]);
change(&A[1][left],&A[1][i]);
Qsort(A,left,i-1);
Qsort(A,i+1,right);
}