#include <iostream>
#include <stdio.h>
#include <string>
#include <cstring>
#include <cmath>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <algorithm>
#include <sstream>
using namespace std;

int main(){
  char str[128][1024],c,buf[1024];
  string input;
  int i,j,now_x,now_y,y_max;

  memset(str,0,sizeof(str));
  memset(buf,0,sizeof(buf));
  for(i=0;getline(cin,input);i++){
    if(input=="END_OF_TEXT")break;
    strcpy(str[i],input.c_str());
  }
  y_max=i-1;
  now_x=now_y=0;
  for(;scanf(" %c ",&c),c!='-';){
    if(c=='a') //¶°¿Ùð»ÝÌsÌæª
      {
        now_x=0;
      }
    else if(c=='e') //J[\ð»ÝÌsÌs
      {
        now_x=strlen(str[now_y]);
      }
    else if(c=='p') //ãÉsª êÎJ[\ðãÌsÌæªAÈ­Äàæª
      {
        if(now_y>0)now_y--;
        now_x=0;
      }
    else if(c=='n') //ºÉsª ``
      {
        if(now_y<y_max)now_y++;
        now_x=0;
      }
    else if(c=='f') //¶°¿ÙªsÅÈ¢Æ«EÉÚ®AsºÉsª éÆ«ºÌsÌæªAÈ¢Æ«Í½àµÈ¢
      {
        if(now_x!=strlen(str[now_y]))now_x++;
        else{
          if(now_y<y_max)now_y++,now_x=0;
        }
      }
    else if(c=='b') //¶°¿Ùªæª¶ÅÈ¢Èç¶°¿Ùð¶ÉÚ®AæªãÉsª``
      {
        if(now_x>0)now_x--;
        else{
          if(now_y>0)now_y--,now_x=strlen(str[now_y]);
        }
      }
    else if(c=='d')//¶°¿Ùª¶ðw·êíAí³ê½¶ÌE¤Í¶É¼ÌÄ``
      {
        if(now_x!=strlen(str[now_y])){
          for(i=now_x;i<strlen(str[now_y]);i++)str[now_y][i]=str[now_y][i+1];
        }
        else{//¶°¿ÙªsÌÆ«
          if(now_y<y_max){
            strcat(str[now_y],str[now_y+1]);
            y_max=now_y;
            for(i=now_y+1;i<127;i++){
              strcpy(str[i],str[i+1]);
              if(str[i][0]!=0)y_max=i;
            }
          }
        }
      }
    else if(c=='k') //
      {
        if(now_x==strlen(str[now_y])){
          if(now_y<y_max){
            strcat(str[now_y],str[now_y+1]);
            y_max=now_y;
            for(i=now_y+1;i<127;i++){
              strcpy(str[i],str[i+1]);
              if(str[i][0]!=0)y_max=i;
            }
            buf[0]='\n'; buf[1]=0;
          }
        }else{
          strcpy(buf,str[now_y]+now_x);
          str[now_y][now_x]=0;
          now_x=strlen(str[now_y]);
          
        }
      }
    else if(c=='y') //
      {
        if(buf[0]!=0){
          if(buf[0]=='\n'){
            for(i=126;i>now_y;i--)strcpy(str[i+1],str[i]);
            strcpy(str[now_y+1],str[now_y]+now_x);
            str[now_y][now_x]=0;
            now_y++; now_x=0;
            y_max++;
          }else{
            char tmp[1024];
            strcpy(tmp,str[now_y]+now_x);
            for(i=now_x,j=0;j<strlen(buf);)str[now_y][i++]=buf[j++];
            str[now_y][i]=0;
            now_x=i;
            strcat(str[now_y],tmp);
          }
        }
      }
    //printf("y_max:%d\n",y_max);
    //for(i=0;i<=y_max;i++)printf("%d:%s\n",i,str[i]);
    //printf("%c-----------------now_x:%d , now_y:%d , y_max:%d\n",c,now_x,now_y,y_max);
  }
  for(i=0;i<=y_max;i++)puts(str[i]);
  return 0;
}

Measured memory_bytes: 0