#include <iostream>
#include <vector>
using namespace std;


void rem(vector<string> &msg,int idx){
	vector<string> r;
	for(int i = 0 ; i < msg.size() ; i++)
		if( i != idx ) r.push_back(msg[i]);
	msg = r;
}

void rem(string &msg,int idx){
	string r;
	for(int i = 0 ; i < msg.size() ; i++)
		if( i != idx ) r += msg[i];
	msg = r;
}

vector<string> msg;
string buf = "";
int x,y;


int main(){
	string tmp;
	while(getline(cin,tmp)){
		if( tmp[tmp.size()-1] == '\r' ) tmp = tmp.substr(0,tmp.size()-1);
		if( tmp == "END_OF_TEXT" ) break;
		msg.push_back(tmp);
	}
	while( cin >> tmp && tmp != "-"){
		if( tmp == "a" ){
			x = 0;
		}
		if( tmp == "e" ){
			x = msg[y].size();
		}
		if( tmp == "p" ){
			x = 0;
			if(y)y--;
		}
		if( tmp == "n") {
			x = 0;
			if(y+1<msg.size())y++;
		}
		if( tmp == "f" ){
			if( x != msg[y].size() ){
				x++;
			}else if( x == msg[y].size() && y + 1 < msg.size() ){
				y++;
				x=0;
			}
		}
		if( tmp == "b" ){
			if( x != 0 ) x--;
			else if( x == 0 && y ){
				y--;
				x = msg[y].size();
			}
		}
		if( tmp == "d" ){
			if( x < msg[y].size() ){
				rem(msg[y],x);
			}else if( x == msg[y].size() && y+1 < msg.size() ){
				msg[y] += msg[y+1];
				rem(msg,y+1);
			}
		}

		if( tmp == "k" ){
			if( x == msg[y].size() && y+1 < msg.size() ){ // ここ日本語怪しいからチェック
				msg[y] += msg[y+1];
				rem(msg,y+1);
				buf = "\n";
			}else if( x != msg[y].size() ){
				buf = msg[y].substr(x);
				msg[y] = msg[y].substr(0,x);
			}//else buf = "\n";
		}
		if( tmp == "y" ){
			if( buf == "" ){
			}else if( buf == "\n" ){
				vector<string> a;
				for(int k = 0 ; k < y ; k++)
					a.push_back(msg[k]);
				a.push_back(msg[y].substr(0,x));
				a.push_back(msg[y].substr(x));
				for(int k = y+1 ; k < msg.size() ; k++)
					a.push_back(msg[k]);
				msg = a;
				y++;
				x = 0;
			}else{
				msg[y] = msg[y].substr(0,x) + buf + msg[y].substr(x);
				x += buf.size();
			}
		}
	}
	for(int i = 0 ; i < msg.size() ; i++)
		cout << msg[i] << endl;
}