#include<stdio.h> #include<string.h> #define SIZE 80 #define MAX 100000 int Min(int x,int y,int z){ int min= x<y ? x : y; return min<z ? min : z; } int main(){ char s1[SIZE]; char s2[SIZE]; int count[SIZE+1][SIZE+1]; int flag[SIZE][SIZE]; while(scanf("%s%s",s1,s2)!=EOF){ //濮flag[][] for(int i=0;i<SIZE;++i) for(int j=0;j<SIZE;++j) flag[i][j]= s1[i]==s2[j] ? 0 : 1 ; for(int i=0;i<=SIZE;++i) count[0][i]=count[i][0]=i; for(int i=1;i<=strlen(s1);++i) for(int j=1;j<=strlen(s2);++j) count[i][j]=Min(count[i-1][j]+1,count[i][j-1]+1,count[i-1][j-1]+flag[i-1][j-1]); printf("%d\n",count[strlen(s1)][strlen(s2)]); for(int is1=strlen(s1),is2=strlen(s2),k=1;k<=count[strlen(s1)][strlen(s2)];){ int t; if(is1==0&&is2!=0) t=1; else if(is1!=0&&is2==0) t=3; else if(is1!=0&&is2!=0){ if(count[is1][is2-1]==Min(count[is1-1][is2],count[is1-1][is2-1],count[is1][is2-1])) t=1; if(count[is1-1][is2]==Min(count[is1-1][is2],count[is1-1][is2-1],count[is1][is2-1])) t=3; if(count[is1-1][is2-1]==Min(count[is1-1][is2],count[is1-1][is2-1],count[is1][is2-1])) t= count[is1-1][is2-1]==count[is1][is2] ? 0:2; } switch(t){ case 0 : --is1;--is2;break; case 1 : printf("%d Insert %d,%c\n",k++,is1+1,s2[--is2]);break; case 2 : printf("%d Replace %d,%c\n",k++,is1--,s2[--is2]);break; case 3 : printf("%d Delete %d\n",k++,is1--);break; } } } return 0; }