/*#include<iostream>
#include<stdio.h>
#include<string>
#include<queue>
#include<math.h>
#include<vector>
#define mp make_pair
#define pb push_back
#define pii pair<int,int>
#define vpii vector<pii>

using namespace std;
int n,x,y;

int main(){
	//freopen("input.txt", "r", stdin);
	//freopen("output.txt", "w", stdout);
	cin >> n >> x >> y;
	int c;
	if(y*n % 100 == 0){
		c = y*n/100 - x;
	}else{
		c = (int)ceil(1.0*y*n/100.0) - x;
	}

	if(c > 0)
		cout << c;
	else
		cout << 0;
	return 0;
}*/
#include<iostream>
#include<stdio.h>
#include<string>
#include<queue>
#include<math.h>
#include<vector>
#define mp make_pair
#define pb push_back
#define pii pair<int,int>
#define vpii vector<pii>

using namespace std;
int n,x,y;
char last = '\0';

bool readline(istream &in, string &s){
	s = "";
	char t;
	bool com = 0, first = 1;
	in >> noskipws;
	last = '\0';

	while(in >> t){
		if(first && t != '\r' && t != '\n' && t != ' ') {
			if(t == '#')
				com = 1;
			else
				com = 0;
			first = false;
		}
		if (t != '\r' && t != '\n')
			s += t;
		else{
			last = t;
			break;
		}
	}
	return com;
}

int main(){
	freopen("input.txt", "r", stdin);
	freopen("output.txt", "w", stdout);
	string a,b;
	int ca, cb;
	cin >> noskipws;

	getline(cin, a); ca = 0;
	for(int i = 0; i < a.length(); i++){
		if(a[i] == ' ') continue;
		if(a[i] == '#') ca = 1; else ca = 0;
		break;
	}

	if(ca){
		cout << a;

	}else{
		for(int i = 0; i < a.length(); i++)
			if(a[i] != ' ')
				cout << a[i];
	}

	while(!cin.eof()){
		getline(cin, b); cb = 0;
		for(int i = 0; i < b.length(); i++){
			if(b[i] == ' ') continue;
			if(b[i] == '#') cb = 1; else cb = 0;
			break;
		}
		if(!ca && !cb){
			for(int i = 0; i < b.length(); i++)
				if(b[i] != ' ')
					cout << b[i];
			if(cin.eof()) cout << endl;
		}
		if(!ca && cb || ca && cb){
			cout << endl << b;
		}

		if(ca && !cb){
			cout << endl;
			for(int i = 0; i < b.length(); i++)
				if(b[i] != ' ')
					cout << b[i];
		}

		ca = cb;
	}

	//cout << endl;

	return 0;
}
/*#include<iostream>
#include <iomanip>
#include<stdio.h>
#include<string>
#include<algorithm>
#include<queue>
#include<math.h>
#include<vector>
#define mp make_pair
#define pb push_back
#define pii pair<int,int>
#define vpii vector<pii>
#define v second
#define tm first

using namespace std;
int n,a,d;
int t, v;
double ta, tb, va, vb;

vpii troll;

int main(){
	//freopen("input.txt", "r", stdin);
	//freopen("output.txt", "w", stdout);
	cin >> n >> a >> d;
	for(int i = 0; i < n; i++){
		cin >> t >> v;
		troll.pb(mp(t,v));
	}

	//sort(troll.begin(), troll. end());

	double ch = sqrt(2.0*d/a);
	if(troll[0].v/a < ch){
		ta = 1.0*troll[0].tm + troll[0].v*1.0/(2*a) + d*1.0/troll[0].v;
	}else{
		ta = troll[0].tm + ch;
	}
	//cout << setprecision(15) << ta << endl;
	printf("%.5lf\n", ta);
	va = troll[0].v;

	for(int i = 1 ; i <n; i++){
		if(troll[i].v > troll[i-1].v ){ // ����� ������
			double inter = (troll[i].v - troll[i-1].v)/(a*2.0) + (troll[i].v*troll[i].tm)/(troll[i].v - troll[i-1].v);
			if(inter < ta){
				printf("%.5lf\n", ta);
			}else{
				if(troll[0].v/a < ch){
					ta = troll[i].tm + troll[i].v*1.0/(2*a) + d*1.0/troll[i].v;
				}else{
					ta = troll[i].tm + ch;
				}
				printf("%.5lf\n", ta);
			}
		}else{
			if(troll[0].v/a < ch){
				ta = troll[i].tm + troll[i].v*1.0/(2*a) + d*1.0/troll[i].v;
			}else{
				ta = troll[i].tm + ch;
			}
			printf("%.5lf\n", ta);
		}
	}

	return 0;
}*/


/*#include<iostream>
#include<stdio.h>
#include<string>
#include<queue>
#include<math.h>
#include<vector>
#define mp make_pair
#define pb push_back
#define pii pair<int,int>
#define vpii vector<pii>

using namespace std;
int n,x,y;

int main(){
	//freopen("input.txt", "r", stdin);
	//freopen("output.txt", "w", stdout);
	cin >> n >> x >> y;
	int c;
	if(y*n % 100 == 0){
		c = y*n/100 - x;
	}else{
		c = (int)ceil(1.0*y*n/100.0) - x;
	}

	if(c > 0)
		cout << c;
	else
		cout << 0;
	return 0;
}*/
#include<iostream>
#include<stdio.h>
#include<string>
#include<queue>
#include<math.h>
#include<vector>
#define mp make_pair
#define pb push_back
#define pii pair<int,int>
#define vpii vector<pii>

using namespace std;
int n,x,y;
char last = '\0';

bool readline(istream &in, string &s){
	s = "";
	char t;
	bool com = 0, first = 1;
	in >> noskipws;
	last = '\0';

	while(in >> t){
		if(first && t != '\r' && t != '\n' && t != ' ') {
			if(t == '#')
				com = 1;
			else
				com = 0;
			first = false;
		}
		if (t != '\r' && t != '\n')
			s += t;
		else{
			last = t;
			break;
		}
	}
	return com;
}

int main(){
	//freopen("input.txt", "r", stdin);
	//freopen("output.txt", "w", stdout);
	string a,b;
	int ca, cb;
	cin >> noskipws;

	getline(cin, a); ca = 0;
	for(int i = 0; i < a.length(); i++){
		if(a[i] == ' ') continue;
		if(a[i] == '#') ca = 1; else ca = 0;
		break;
	}

	if(ca){
		cout << a;

	}else{
		for(int i = 0; i < a.length(); i++)
			if(a[i] != ' ')
				cout << a[i];
	}

	while(!cin.eof()){
		getline(cin, b); cb = 0;
		for(int i = 0; i < b.length(); i++){
			if(b[i] == ' ') continue;
			if(b[i] == '#') cb = 1; else cb = 0;
			break;
		}
		if(!ca && !cb){
			for(int i = 0; i < b.length(); i++)
				if(b[i] != ' ')
					cout << b[i];
			if(cin.eof()) cout << endl;
		}
		if(!ca && cb || ca && cb){
			cout << endl << b;
		}

		if(ca && !cb){
			cout << endl;
			for(int i = 0; i < b.length(); i++)
				if(b[i] != ' ')
					cout << b[i];
		}

		ca = cb;
	}

	//cout << endl;

	return 0;
}
/*#include<iostream>
#include <iomanip>
#include<stdio.h>
#include<string>
#include<algorithm>
#include<queue>
#include<math.h>
#include<vector>
#define mp make_pair
#define pb push_back
#define pii pair<int,int>
#define vpii vector<pii>
#define v second
#define tm first

using namespace std;
int n,a,d;
int t, v;
double ta, tb, va, vb;

vpii troll;

int main(){
	//freopen("input.txt", "r", stdin);
	//freopen("output.txt", "w", stdout);
	cin >> n >> a >> d;
	for(int i = 0; i < n; i++){
		cin >> t >> v;
		troll.pb(mp(t,v));
	}

	//sort(troll.begin(), troll. end());

	double ch = sqrt(2.0*d/a);
	if(troll[0].v/a < ch){
		ta = 1.0*troll[0].tm + troll[0].v*1.0/(2*a) + d*1.0/troll[0].v;
	}else{
		ta = troll[0].tm + ch;
	}
	//cout << setprecision(15) << ta << endl;
	printf("%.5lf\n", ta);
	va = troll[0].v;

	for(int i = 1 ; i <n; i++){
		if(troll[i].v > troll[i-1].v ){ // ����� ������
			double inter = (troll[i].v - troll[i-1].v)/(a*2.0) + (troll[i].v*troll[i].tm)/(troll[i].v - troll[i-1].v);
			if(inter < ta){
				printf("%.5lf\n", ta);
			}else{
				if(troll[0].v/a < ch){
					ta = troll[i].tm + troll[i].v*1.0/(2*a) + d*1.0/troll[i].v;
				}else{
					ta = troll[i].tm + ch;
				}
				printf("%.5lf\n", ta);
			}
		}else{
			if(troll[0].v/a < ch){
				ta = troll[i].tm + troll[i].v*1.0/(2*a) + d*1.0/troll[i].v;
			}else{
				ta = troll[i].tm + ch;
			}
			printf("%.5lf\n", ta);
		}
	}

	return 0;
}*/


/*#include<iostream>
#include<stdio.h>
#include<string>
#include<queue>
#include<math.h>
#include<vector>
#define mp make_pair
#define pb push_back
#define pii pair<int,int>
#define vpii vector<pii>

using namespace std;
int n,x,y;

int main(){
	//freopen("input.txt", "r", stdin);
	//freopen("output.txt", "w", stdout);
	cin >> n >> x >> y;
	int c;
	if(y*n % 100 == 0){
		c = y*n/100 - x;
	}else{
		c = (int)ceil(1.0*y*n/100.0) - x;
	}

	if(c > 0)
		cout << c;
	else
		cout << 0;
	return 0;
}*/
#include<iostream>
#include<stdio.h>
#include<string>
#include<queue>
#include<math.h>
#include<vector>
#define mp make_pair
#define pb push_back
#define pii pair<int,int>
#define vpii vector<pii>

using namespace std;
int n,x,y;
char last = '\0';

bool readline(istream &in, string &s){
	s = "";
	char t;
	bool com = 0, first = 1;
	in >> noskipws;
	last = '\0';

	while(in >> t){
		if(first && t != '\r' && t != '\n' && t != ' ') {
			if(t == '#')
				com = 1;
			else
				com = 0;
			first = false;
		}
		if (t != '\r' && t != '\n')
			s += t;
		else{
			last = t;
			break;
		}
	}
	return com;
}

int main(){
	//freopen("input.txt", "r", stdin);
	//freopen("output.txt", "w", stdout);
	string a,b;
	int ca, cb;
	cin >> noskipws;

	getline(cin, a); ca = 0;
	for(int i = 0; i < a.length(); i++){
		if(a[i] == ' ') continue;
		if(a[i] == '#') ca = 1; else ca = 0;
		break;
	}

	if(ca){
		cout << a;

	}else{
		for(int i = 0; i < a.length(); i++)
			if(a[i] != ' ')
				cout << a[i];
	}

	while(!cin.eof()){
		getline(cin, b); cb = 0;
		for(int i = 0; i < b.length(); i++){
			if(b[i] == ' ') continue;
			if(b[i] == '#') cb = 1; else cb = 0;
			break;
		}
		if(!ca && !cb){
			for(int i = 0; i < b.length(); i++)
				if(b[i] != ' ')
					cout << b[i];
		}
		if(!ca && cb || ca && cb){
			cout << endl << b;
		}

		if(ca && !cb){
			cout << endl;
			for(int i = 0; i < b.length(); i++)
				if(b[i] != ' ')
					cout << b[i];
		}

		ca = cb;
	}
	if(cb) cout << endl;

	return 0;
}
/*#include<iostream>
#include <iomanip>
#include<stdio.h>
#include<string>
#include<algorithm>
#include<queue>
#include<math.h>
#include<vector>
#define mp make_pair
#define pb push_back
#define pii pair<int,int>
#define vpii vector<pii>
#define v second
#define tm first

using namespace std;
int n,a,d;
int t, v;
double ta, tb, va, vb;

vpii troll;

int main(){
	//freopen("input.txt", "r", stdin);
	//freopen("output.txt", "w", stdout);
	cin >> n >> a >> d;
	for(int i = 0; i < n; i++){
		cin >> t >> v;
		troll.pb(mp(t,v));
	}

	//sort(troll.begin(), troll. end());

	double ch = sqrt(2.0*d/a);
	if(troll[0].v/a < ch){
		ta = 1.0*troll[0].tm + troll[0].v*1.0/(2*a) + d*1.0/troll[0].v;
	}else{
		ta = troll[0].tm + ch;
	}
	//cout << setprecision(15) << ta << endl;
	printf("%.5lf\n", ta);
	va = troll[0].v;

	for(int i = 1 ; i <n; i++){
		if(troll[i].v > troll[i-1].v ){ // ����� ������
			double inter = (troll[i].v - troll[i-1].v)/(a*2.0) + (troll[i].v*troll[i].tm)/(troll[i].v - troll[i-1].v);
			if(inter < ta){
				printf("%.5lf\n", ta);
			}else{
				if(troll[0].v/a < ch){
					ta = troll[i].tm + troll[i].v*1.0/(2*a) + d*1.0/troll[i].v;
				}else{
					ta = troll[i].tm + ch;
				}
				printf("%.5lf\n", ta);
			}
		}else{
			if(troll[0].v/a < ch){
				ta = troll[i].tm + troll[i].v*1.0/(2*a) + d*1.0/troll[i].v;
			}else{
				ta = troll[i].tm + ch;
			}
			printf("%.5lf\n", ta);
		}
	}

	return 0;
}*/


/*#include<iostream>
#include<stdio.h>
#include<string>
#include<queue>
#include<math.h>
#include<vector>
#define mp make_pair
#define pb push_back
#define pii pair<int,int>
#define vpii vector<pii>

using namespace std;
int n,x,y;

int main(){
	//freopen("input.txt", "r", stdin);
	//freopen("output.txt", "w", stdout);
	cin >> n >> x >> y;
	int c;
	if(y*n % 100 == 0){
		c = y*n/100 - x;
	}else{
		c = (int)ceil(1.0*y*n/100.0) - x;
	}

	if(c > 0)
		cout << c;
	else
		cout << 0;
	return 0;
}*/
#include<iostream>
#include<stdio.h>
#include<string>
#include<queue>
#include<math.h>
#include<vector>
#define mp make_pair
#define pb push_back
#define pii pair<int,int>
#define vpii vector<pii>

using namespace std;
int n,x,y;
char last = '\0';

bool readline(istream &in, string &s){
	s = "";
	char t;
	bool com = 0, first = 1;
	in >> noskipws;
	last = '\0';

	while(in >> t){
		if(first && t != '\r' && t != '\n' && t != ' ') {
			if(t == '#')
				com = 1;
			else
				com = 0;
			first = false;
		}
		if (t != '\r' && t != '\n')
			s += t;
		else{
			last = t;
			break;
		}
	}
	return com;
}

int main(){
	//freopen("input.txt", "r", stdin);
	//freopen("output.txt", "w", stdout);
	string a,b;
	int ca, cb;
	cin >> noskipws;

	getline(cin, a); ca = 0;
	for(int i = 0; i < a.length(); i++){
		if(a[i] == ' ') continue;
		if(a[i] == '#') ca = 1; else ca = 0;
		break;
	}

	if(ca){
		cout << a;

	}else{
		for(int i = 0; i < a.length(); i++)
			if(a[i] != ' ')
				cout << a[i];
	}

	while(!cin.eof()){
		getline(cin, b); cb = 0;
		for(int i = 0; i < b.length(); i++){
			if(b[i] == ' ') continue;
			if(b[i] == '#') cb = 1; else cb = 0;
			break;
		}
		if(!ca && !cb){
			for(int i = 0; i < b.length(); i++)
				if(b[i] != ' ')
					cout << b[i];
		}
		if(!ca && cb || ca && cb){
			cout << endl << b;
		}

		if(ca && !cb){
			cout << endl;
			for(int i = 0; i < b.length(); i++)
				if(b[i] != ' ')
					cout << b[i];
		}

		ca = cb;
	}
	if(ca) cout << endl;

	return 0;
}
/*#include<iostream>
#include <iomanip>
#include<stdio.h>
#include<string>
#include<algorithm>
#include<queue>
#include<math.h>
#include<vector>
#define mp make_pair
#define pb push_back
#define pii pair<int,int>
#define vpii vector<pii>
#define v second
#define tm first

using namespace std;
int n,a,d;
int t, v;
double ta, tb, va, vb;

vpii troll;

int main(){
	//freopen("input.txt", "r", stdin);
	//freopen("output.txt", "w", stdout);
	cin >> n >> a >> d;
	for(int i = 0; i < n; i++){
		cin >> t >> v;
		troll.pb(mp(t,v));
	}

	//sort(troll.begin(), troll. end());

	double ch = sqrt(2.0*d/a);
	if(troll[0].v/a < ch){
		ta = 1.0*troll[0].tm + troll[0].v*1.0/(2*a) + d*1.0/troll[0].v;
	}else{
		ta = troll[0].tm + ch;
	}
	//cout << setprecision(15) << ta << endl;
	printf("%.5lf\n", ta);
	va = troll[0].v;

	for(int i = 1 ; i <n; i++){
		if(troll[i].v > troll[i-1].v ){ // ����� ������
			double inter = (troll[i].v - troll[i-1].v)/(a*2.0) + (troll[i].v*troll[i].tm)/(troll[i].v - troll[i-1].v);
			if(inter < ta){
				printf("%.5lf\n", ta);
			}else{
				if(troll[0].v/a < ch){
					ta = troll[i].tm + troll[i].v*1.0/(2*a) + d*1.0/troll[i].v;
				}else{
					ta = troll[i].tm + ch;
				}
				printf("%.5lf\n", ta);
			}
		}else{
			if(troll[0].v/a < ch){
				ta = troll[i].tm + troll[i].v*1.0/(2*a) + d*1.0/troll[i].v;
			}else{
				ta = troll[i].tm + ch;
			}
			printf("%.5lf\n", ta);
		}
	}

	return 0;
}*/


/*#include<iostream>
#include<stdio.h>
#include<string>
#include<queue>
#include<math.h>
#include<vector>
#define mp make_pair
#define pb push_back
#define pii pair<int,int>
#define vpii vector<pii>

using namespace std;
int n,x,y;

int main(){
	//freopen("input.txt", "r", stdin);
	//freopen("output.txt", "w", stdout);
	cin >> n >> x >> y;
	int c;
	if(y*n % 100 == 0){
		c = y*n/100 - x;
	}else{
		c = (int)ceil(1.0*y*n/100.0) - x;
	}

	if(c > 0)
		cout << c;
	else
		cout << 0;
	return 0;
}*/
#include<iostream>
#include<stdio.h>
#include<string>
#include<queue>
#include<math.h>
#include<vector>
#define mp make_pair
#define pb push_back
#define pii pair<int,int>
#define vpii vector<pii>

using namespace std;
int n,x,y;

bool readline(istream &in, string &s){
	s = "";
	char t;
	bool com = 0, first = 1;
	in >> noskipws;

	while(in >> t){
		if(first && t != '\r' && t != '\n' && t != ' ') {
			if(t == '#')
				com = 1;
			else
				com = 0;
			first = false;
		}
		if (t != '\r' && t != '\n')
			s += t;
		else
			break;
	}
	return com;
}

int main(){
	//freopen("input.txt", "r", stdin);
	//freopen("output.txt", "w", stdout);
	string a,b;
	bool ca, cb;

	ca = readline(cin, a);
	if(ca){
		//cout << a;
		printf("%s", a.c_str());
	}else{
		for(int i = 0; i < a.length(); i++)
			if(a[i] != ' ')
				cout << a[i];
	}

	while(!cin.eof()){
		cb = readline(cin, b);
		if(!ca && !cb){
			for(int i = 0; i < b.length(); i++)
				if(b[i] != ' ')
					cout << b[i];
		}
		if(!ca && cb || ca && cb){
			cout << '\n' << b;
		}

		if(ca && !cb){
			cout << '\n' ;
			for(int i = 0; i < b.length(); i++)
				if(b[i] != ' ')
					cout << b[i];
		}

		ca = cb;
	}
	//cout << endl;

	return 0;
}
/*#include<iostream>
#include <iomanip>
#include<stdio.h>
#include<string>
#include<algorithm>
#include<queue>
#include<math.h>
#include<vector>
#define mp make_pair
#define pb push_back
#define pii pair<int,int>
#define vpii vector<pii>
#define v second
#define tm first

using namespace std;
int n,a,d;
int t, v;
double ta, tb, va, vb;

vpii troll;

int main(){
	//freopen("input.txt", "r", stdin);
	//freopen("output.txt", "w", stdout);
	cin >> n >> a >> d;
	for(int i = 0; i < n; i++){
		cin >> t >> v;
		troll.pb(mp(t,v));
	}

	//sort(troll.begin(), troll. end());

	double ch = sqrt(2.0*d/a);
	if(troll[0].v/a < ch){
		ta = 1.0*troll[0].tm + troll[0].v*1.0/(2*a) + d*1.0/troll[0].v;
	}else{
		ta = troll[0].tm + ch;
	}
	//cout << setprecision(15) << ta << endl;
	printf("%.5lf\n", ta);
	va = troll[0].v;

	for(int i = 1 ; i <n; i++){
		if(troll[i].v > troll[i-1].v ){ // ����� ������
			double inter = (troll[i].v - troll[i-1].v)/(a*2.0) + (troll[i].v*troll[i].tm)/(troll[i].v - troll[i-1].v);
			if(inter < ta){
				printf("%.5lf\n", ta);
			}else{
				if(troll[0].v/a < ch){
					ta = troll[i].tm + troll[i].v*1.0/(2*a) + d*1.0/troll[i].v;
				}else{
					ta = troll[i].tm + ch;
				}
				printf("%.5lf\n", ta);
			}
		}else{
			if(troll[0].v/a < ch){
				ta = troll[i].tm + troll[i].v*1.0/(2*a) + d*1.0/troll[i].v;
			}else{
				ta = troll[i].tm + ch;
			}
			printf("%.5lf\n", ta);
		}
	}

	return 0;
}*/


/*#include<iostream>
#include<stdio.h>
#include<string>
#include<queue>
#include<math.h>
#include<vector>
#define mp make_pair
#define pb push_back
#define pii pair<int,int>
#define vpii vector<pii>

using namespace std;
int n,x,y;

int main(){
	//freopen("input.txt", "r", stdin);
	//freopen("output.txt", "w", stdout);
	cin >> n >> x >> y;
	int c;
	if(y*n % 100 == 0){
		c = y*n/100 - x;
	}else{
		c = (int)ceil(1.0*y*n/100.0) - x;
	}

	if(c > 0)
		cout << c;
	else
		cout << 0;
	return 0;
}*/
#include<iostream>
#include<stdio.h>
#include<string>
#include<queue>
#include<math.h>
#include<vector>
#define mp make_pair
#define pb push_back
#define pii pair<int,int>
#define vpii vector<pii>

using namespace std;
int n,x,y;
char last = '\0';

bool readline(istream &in, string &s){
	s = "";
	char t;
	bool com = 0, first = 1;
	in >> noskipws;

	while(in >> t){
		if(first && t != '\r' && t != '\n' && t != ' ') {
			if(t == '#')
				com = 1;
			else
				com = 0;
			first = false;
		}
		if (t != '\r' && t != '\n')
			s += t;
		else{
			last = t;
			break;
		}
	}
	return com;
}

int main(){
	//freopen("input.txt", "r", stdin);
	//freopen("output.txt", "w", stdout);
	string a,b;
	bool ca, cb;

	ca = readline(cin, a);
	if(ca){
		//cout << a;
		printf("%s", a.c_str());
	}else{
		for(int i = 0; i < a.length(); i++)
			if(a[i] != ' ')
				cout << a[i];
	}

	while(!cin.eof()){
		cb = readline(cin, b);
		if(!ca && !cb){
			for(int i = 0; i < b.length(); i++)
				if(b[i] != ' ')
					cout << b[i];
		}
		if(!ca && cb || ca && cb){
			cout << '\n' << b;
		}

		if(ca && !cb){
			cout << '\n' ;
			for(int i = 0; i < b.length(); i++)
				if(b[i] != ' ')
					cout << b[i];
		}

		ca = cb;
	}
	if(last != '\0') cout << last;

	return 0;
}
/*#include<iostream>
#include <iomanip>
#include<stdio.h>
#include<string>
#include<algorithm>
#include<queue>
#include<math.h>
#include<vector>
#define mp make_pair
#define pb push_back
#define pii pair<int,int>
#define vpii vector<pii>
#define v second
#define tm first

using namespace std;
int n,a,d;
int t, v;
double ta, tb, va, vb;

vpii troll;

int main(){
	//freopen("input.txt", "r", stdin);
	//freopen("output.txt", "w", stdout);
	cin >> n >> a >> d;
	for(int i = 0; i < n; i++){
		cin >> t >> v;
		troll.pb(mp(t,v));
	}

	//sort(troll.begin(), troll. end());

	double ch = sqrt(2.0*d/a);
	if(troll[0].v/a < ch){
		ta = 1.0*troll[0].tm + troll[0].v*1.0/(2*a) + d*1.0/troll[0].v;
	}else{
		ta = troll[0].tm + ch;
	}
	//cout << setprecision(15) << ta << endl;
	printf("%.5lf\n", ta);
	va = troll[0].v;

	for(int i = 1 ; i <n; i++){
		if(troll[i].v > troll[i-1].v ){ // ����� ������
			double inter = (troll[i].v - troll[i-1].v)/(a*2.0) + (troll[i].v*troll[i].tm)/(troll[i].v - troll[i-1].v);
			if(inter < ta){
				printf("%.5lf\n", ta);
			}else{
				if(troll[0].v/a < ch){
					ta = troll[i].tm + troll[i].v*1.0/(2*a) + d*1.0/troll[i].v;
				}else{
					ta = troll[i].tm + ch;
				}
				printf("%.5lf\n", ta);
			}
		}else{
			if(troll[0].v/a < ch){
				ta = troll[i].tm + troll[i].v*1.0/(2*a) + d*1.0/troll[i].v;
			}else{
				ta = troll[i].tm + ch;
			}
			printf("%.5lf\n", ta);
		}
	}

	return 0;
}*/


/*
 * Author:heroming
 * File:heroming.cpp
 * Time:2012/3/27 23:45:07
 */
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;

#define SZ(v) ((int)(v).size())

string str, ans;
bool flag = 0;

int main()
{
        while (getline(cin, str))
        {
                if (str == "" && ! flag)
                        flag = 1;
                for (int i = 0; i < SZ(str); ++ i)
                {
                        if (str[i] == ' ')
                                continue;
                        else if(str[i] == '#')
                        {
                                if (flag)
                                        ans += '\n';
                                flag = 0;
                                ans += str + '\n';
                                break;
                        }
                        else
                        {
                                for (int i = 0; i < SZ(str); ++ i)
                                        if (str[i] != ' ')
                                                ans += str[i];
                                flag = 1;
                                break;
                        }
                }
        }
        cout << ans << endl;
        return 0;
}


/*
 * Author:heroming
 * File:heroming.cpp
 * Time:2012/3/27 23:45:07
 */
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;

#define SZ(v) ((int)(v).size())

string str, ans;
int flag = -1, ok;

int main()
{
        while (getline(cin, str))
        {
                if (str == "" && flag == 0)
                        flag = 1;
                ok = 1;
                for (int i = 0; i < SZ(str); ++ i)
                {
                        if (str[i] == ' ')
                                continue;
                        else if(str[i] == '#')
                        {
                                if (flag != -1)
                                        ans += '\n';
                                if (flag == 1)
                                        ans += '\n';
                                flag = 0;
                                ok = 0;
                                ans += str;
                                break;
                        }
                        else
                                break;
                }
                if (ok)
                {
                        if (flag == 0 || flag == 1)
                                ans += '\n';
                        for (int i = 0; i < SZ(str); ++ i)
                                if (str[i] != ' ')
                                        ans += str[i];
                        flag = 2;
                }
        }
        cout << ans << endl;
        return 0;
}


/*
 * Author:heroming
 * File:heroming.cpp
 * Time:2012/3/27 23:45:07
 */
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;

#define SZ(v) ((int)(v).size())

string str, ans;
bool flag = 0, ok = 0;

int main()
{
        while (getline(cin, str))
        {
                if (str == "" && ok)
                {
                        ok = 0;
                        ans += '\n';
                        continue;
                }
                for (int i = 0; i < SZ(str); ++ i)
                {
                        if (str[i] == ' ')
                                continue;
                        else if(str[i] == '#')
                        {
                                if (flag)
                                {
                                        ans += '\n';
                                        flag = 0;
                                }
                                ans += str + '\n';
                                ok = 1;
                                break;
                        }
                        else
                        {
                                for (int i = 0; i < SZ(str); ++ i)
                                        if (str[i] != ' ')
                                                ans += str[i];
                                flag = 1;
                                break;
                        }
                }
        }
        cout << ans << endl;
        return 0;
}


/*
 * Author:heroming
 * File:heroming.cpp
 * Time:2012/3/27 23:45:07
 */
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;

#define SZ(v) ((int)(v).size())

string str, ans;
int flag = -1;

int main()
{
        while (getline(cin, str))
        {
                if (str == "" && ! flag)
                        flag = 2;
                for (int i = 0; i < SZ(str); ++ i)
                {
                        if (str[i] == ' ')
                                continue;
                        else if(str[i] == '#')
                        {
                                for (int i = 0; i < flag; ++ i)
                                        ans += '\n';
                                flag = 0;
                                ans += str;
                                break;
                        }
                        else
                        {
                                if (flag == 0 || flag == 2)
                                        ans += '\n';
                                for (int i = 0; i < SZ(str); ++ i)
                                        if (str[i] != ' ')
                                                ans += str[i];
                                flag = 1;
                                break;
                        }
                }
        }
        cout << ans << endl;
        return 0;
}


/*
 * Author:heroming
 * File:heroming.cpp
 * Time:2012/3/27 23:45:07
 */
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;

#define SZ(v) ((int)(v).size())

string str, ans;
bool flag = 0;

int main()
{
        while (getline(cin, str))
        {
                if (str == "")
                        flag = 1;
                for (int i = 0; i < SZ(str); ++ i)
                {
                        if (str[i] == ' ')
                                continue;
                        else if(str[i] == '#')
                        {
                                if (flag)
                                        ans += '\n';
                                flag = 0;
                                ans += str + '\n';
                                break;
                        }
                        else
                        {
                                for (int i = 0; i < SZ(str); ++ i)
                                        if (str[i] != ' ')
                                                ans += str[i];
                                flag = 1;
                                break;
                        }
                }
        }
        cout << ans << endl;
        return 0;
}


/*
 * Author:heroming
 * File:heroming.cpp
 * Time:2012/3/27 23:45:07
 */
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;

#define SZ(v) ((int)(v).size())

string str, ans;
int flag = -1, ok = 0;

int main()
{
        while (getline(cin, str))
        {
                if (str == "" && ! flag)
                {
                        flag = 2;
                        ok = 0;
                }
                for (int i = 0; i < SZ(str); ++ i)
                {
                        if (str[i] == ' ')
                                continue;
                        else if(str[i] == '#')
                        {
                                if (flag)
                                {
                                        for (int i = 0; i < flag; ++ i)
                                                ans += '\n';
                                        flag = 0;
                                }
                                else if (ok)
                                {
                                        ans += '\n';
                                        ok = 0;
                                }
                                flag = 0;
                                ok = 1;
                                ans += str;
                                break;
                        }
                        else
                        {
                                if (flag == 0 || flag == 2)
                                        ans += '\n';
                                for (int i = 0; i < SZ(str); ++ i)
                                        if (str[i] != ' ')
                                                ans += str[i];
                                flag = 1;
                                ok = 0;
                                break;
                        }
                }
        }
        cout << ans << endl;
        return 0;
}


/*
 * Author:heroming
 * File:heroming.cpp
 * Time:2012/3/27 23:45:07
 */
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;

#define SZ(v) ((int)(v).size())

string str, ans;
int flag = -1;

int main()
{
        while (getline(cin, str))
        {
                if (str == "" && flag == 0)
                        flag = 1;
                for (int i = 0; i < SZ(str); ++ i)
                {
                        if (str[i] == ' ')
                                continue;
                        else if(str[i] == '#')
                        {
                                if (flag != -1)
                                        ans += '\n';
                                if (flag == 1)
                                        ans += '\n';
                                flag = 0;
                                ans += str;
                                break;
                        }
                        else
                        {
                                if (flag == 0 || flag == 1)
                                        ans += '\n';
                                for (int i = 0; i < SZ(str); ++ i)
                                        if (str[i] != ' ')
                                                ans += str[i];
                                flag = 2;
                                break;
                        }
                }
        }
        cout << ans << endl;
        return 0;
}


#include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> P;
typedef long long LL;
#define INF 0x3f3f3f3f
#define PI acos(-1)
#define MAX_N 1050000
//#define LOCAL
vector<string> vct;
bool ok[MAX_N];
void pan()
{
    for(int i = 0; i < vct.size(); i++)
    {
        string now = vct[i];
        bool flag = 0;
        for(int j = 0; j < now.length(); j++)
        {
            if(now[j] != 13 && now[j] != 10 && now[j] != 32)
            {
                if(now[j] == '#')
                flag = 1;
                break;
            }
        }
        ok[i] = flag;       //如果是特殊行
    }
}
void prt(int d)
{
    string now = vct[d];
    for(int i = 0; i < now.length(); i++)
    {
        if(now[i] == 32)
            continue;
        cout << now[i];
    }
    if(d != vct.size()-1 && ok[d+1] == 1)       //换行
        cout << endl;
    if(d == vct.size()-1 && ok[d-1] == 0)
        cout << endl;
}
int main()
{
	#ifdef LOCAL
		freopen("b:\\data.in.txt", "r", stdin);
	#endif
	string tem_line;
    while(getline(cin, tem_line))
    {
        vct.push_back(tem_line);
    }
    pan();
//    for(int i = 1; i < vct.size()-1; i++)     //处理结果集
//    {
//        if(ok[i] == 0)
//        {
//            if(ok[i-1] != 0 && ok[i+1] != 0)
//                ok[i] = 1;
//        }
//    }
    int len = vct.size();
    if(ok[0] == 0 && ok[1] == 1) ok[0] = 1;
    if(ok[len-1] == 0 && ok[len-2] == 1) ok[len-1] = 1;
//    for(int i = 0; i < len; i++)
//    {
//        cout << ok[i] << endl;
//    }
    for(int i = 0; i < len; i++)
    {
        if(i == 0 && ok[i] == 1)
        {
            prt(i);
            continue;
        }
        if(ok[i]) cout << vct[i] << endl;
        else
            prt(i);
    }
    return 0;
}


#include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> P;
typedef long long LL;
#define INF 0x3f3f3f3f
#define PI acos(-1)
#define MAX_N 1050000
//#define LOCAL
vector<string> vct;
bool ok[MAX_N];
void pan()
{
    for(int i = 0; i < vct.size(); i++)
    {
        string now = vct[i];
        bool flag = 0;
        for(int j = 0; j < now.length(); j++)
        {
            if(now[j] != 13 && now[j] != 10 && now[j] != 32)
            {
                if(now[j] == '#')
                flag = 1;
                break;
            }
        }
        ok[i] = flag;       //如果是特殊行
    }
}
void prt(int d)
{
    string now = vct[d];
    for(int i = 0; i < now.length(); i++)
    {
        if(now[i] == 32 || now[i] == 10 || now[i] == 13)
            continue;
        cout << now[i];
    }
    if(d != vct.size()-1 && ok[d+1] == 1)       //换行
        cout << endl;
//    if(d == vct.size()-1 && ok[d-1] == 0)
//        cout << endl;
}
int main()
{
	#ifdef LOCAL
		freopen("b:\\data.in.txt", "r", stdin);
	#endif
	string tem_line;
    while(getline(cin, tem_line))
    {
        vct.push_back(tem_line);
    }
    pan();
    for(int i = 1; i < vct.size()-1; i++)     //处理结果集
    {
        if(ok[i] == 0)
        {
            if(ok[i-1] != 0 && ok[i+1] != 0)
                ok[i] = 1;
        }
    }
    int len = vct.size();
    if(ok[0] == 0 && ok[1] == 1) ok[0] = 1;
    if(ok[len-1] == 0 && ok[len-2] == 1) ok[len-1] = 1;
//    for(int i = 0; i < len; i++)
//    {
//        cout << ok[i] << endl;
//    }
    for(int i = 0; i < len; i++)
    {
        if(ok[i]) cout << vct[i] << endl;
        else
            prt(i);
    }
    return 0;
}


#include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> P;
typedef long long LL;
#define INF 0x3f3f3f3f
#define PI acos(-1)
#define MAX_N 1050000
//#define LOCAL
vector<string> vct;
bool ok[MAX_N];
void pan()
{
    for(int i = 0; i < vct.size(); i++)
    {
        string now = vct[i];
        bool flag = 0;
        for(int j = 0; j < now.length(); j++)
        {
            if(now[j] != 13 && now[j] != 10 && now[j] != 32)
            {
                if(now[j] == '#')
                flag = 1;
                break;
            }
        }
        ok[i] = flag;       //如果是特殊行
    }
}
void prt(int d)
{
    string now = vct[d];
    for(int i = 0; i < now.length(); i++)
    {
        if(now[i] == 32)
            continue;
        cout << now[i];
    }
    if(d != vct.size()-1 && ok[d+1] == 1)       //换行
        cout << endl;
    if(d == vct.size()-1 && ok[d-1] == 0)
        cout << endl;
}
int main()
{
	#ifdef LOCAL
		freopen("b:\\data.in.txt", "r", stdin);
	#endif
	string tem_line;
    while(getline(cin, tem_line))
    {
        vct.push_back(tem_line);
    }
    pan();
//    for(int i = 1; i < vct.size()-1; i++)     //处理结果集
//    {
//        if(ok[i] == 0)
//        {
//            if(ok[i-1] != 0 && ok[i+1] != 0)
//                ok[i] = 1;
//        }
//    }
    int len = vct.size();
//    if(ok[0] == 0 && ok[1] == 1) ok[0] = 1;
//    if(ok[len-1] == 0 && ok[len-2] == 1) ok[len-1] = 1;
//    for(int i = 0; i < len; i++)
//    {
//        cout << ok[i] << endl;
//    }
    for(int i = 0; i < len; i++)
    {
        if(ok[i]) cout << vct[i] << endl;
        else
            prt(i);
    }
    return 0;
}


#include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> P;
typedef long long LL;
#define INF 0x3f3f3f3f
#define PI acos(-1)
#define MAX_N 1050000
//#define LOCAL
vector<string> vct;
bool ok[MAX_N];
void pan()
{
    for(int i = 0; i < vct.size(); i++)
    {
        string now = vct[i];
        bool flag = 0;
        for(int j = 0; j < now.length(); j++)
        {
            if(now[j] != 13 && now[j] != 10 && now[j] != 32)
            {
                if(now[j] == '#')
                flag = 1;
                break;
            }
        }
        ok[i] = flag;       //如果是特殊行
    }
}
void prt(int d)
{
    string now = vct[d];
    for(int i = 0; i < now.length(); i++)
    {
        if(now[i] == 32)
            continue;
        cout << now[i];
    }
    if(d != vct.size()-1 && ok[d+1] == 1)       //换行
        cout << endl;
    if(d == vct.size()-1 && ok[d-1] == 0)
        cout << endl;
}
int main()
{
	#ifdef LOCAL
		freopen("b:\\data.in.txt", "r", stdin);
	#endif
	string tem_line;
    while(getline(cin, tem_line))
    {
        vct.push_back(tem_line);
    }
    pan();
//    for(int i = 1; i < vct.size()-1; i++)     //处理结果集
//    {
//        if(ok[i] == 0)
//        {
//            if(ok[i-1] != 0 && ok[i+1] != 0)
//                ok[i] = 1;
//        }
//    }
    int len = vct.size();
    if(ok[0] == 0 && ok[1] == 1) ok[0] = 1;
    if(ok[len-1] == 0 && ok[len-2] == 1) ok[len-1] = 1;
//    for(int i = 0; i < len; i++)
//    {
//        cout << ok[i] << endl;
//    }
    for(int i = 0; i < len; i++)
    {
        if(ok[i]) cout << vct[i] << endl;
        else
            prt(i);
    }
    return 0;
}


#include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> P;
typedef long long LL;
#define INF 0x3f3f3f3f
#define PI acos(-1)
#define MAX_N 1050000
//#define LOCAL
vector<string> vct;
bool ok[MAX_N];
void pan()
{
    for(int i = 0; i < vct.size(); i++)
    {
        string now = vct[i];
        bool flag = 0;
        for(int j = 0; j < now.length(); j++)
        {
            if(now[j] != 13 && now[j] != 10 && now[j] != 32)
            {
                if(now[j] == '#')
                flag = 1;
                break;
            }
        }
        ok[i] = flag;       //如果是特殊行
    }
}
void prt(int d)
{
    string now = vct[d];
    for(int i = 0; i < now.length(); i++)
    {
        if(now[i] == ' ')
            continue;
        cout << now[i];
    }
    if(d != vct.size()-1 && ok[d+1] == 1)       //换行
        cout << endl;
//    if(d == vct.size()-1 && ok[d-1] == 0)
//        cout << endl;
}
int main()
{
	#ifdef LOCAL
		freopen("b:\\data.in.txt", "r", stdin);
	#endif
	string tem_line;
    while(getline(cin, tem_line))
    {
        vct.push_back(tem_line);
    }
    pan();
//    for(int i = 1; i < vct.size()-1; i++)     //处理结果集
//    {
//        if(ok[i] == 0)
//        {
//            if(ok[i-1] != 0 && ok[i+1] != 0)
//                ok[i] = 1;
//        }
//    }
    int len = vct.size();
    if(ok[0] == 0 && ok[1] == 1) ok[0] = 1;
    if(ok[len-1] == 0 && ok[len-2] == 1) ok[len-1] = 1;
//    for(int i = 0; i < len; i++)
//    {
//        cout << ok[i] << endl;
//    }
    for(int i = 0; i < len; i++)
    {
        if(ok[i]) cout << vct[i] << endl;
        else
            prt(i);
    }
    return 0;
}


#include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> P;
typedef long long LL;
#define INF 0x3f3f3f3f
#define PI acos(-1)
#define MAX_N 1050000
//#define LOCAL
vector<string> vct;
bool ok[MAX_N];
void pan()
{
    for(int i = 0; i < vct.size(); i++)
    {
        string now = vct[i];
        bool flag = 0;
        for(int j = 0; j < now.length(); j++)
        {
            if(now[j] != 13 && now[j] != 10 && now[j] != 32)
            {
                if(now[j] == '#')
                flag = 1;
                break;
            }
        }
        ok[i] = flag;       //如果是特殊行
    }
}
void prt(int d)
{
    string now = vct[d];
    for(int i = 0; i < now.length(); i++)
    {
        if(now[i] == ' ')
            continue;
        cout << now[i];
    }
    if(d != vct.size()-1 && ok[d+1] == 1)       //换行
        cout << endl;
    if(d == vct.size()-1 && ok[d-1] == 0)
        cout << endl;
}
int main()
{
	#ifdef LOCAL
		freopen("b:\\data.in.txt", "r", stdin);
	#endif
	string tem_line;
    while(getline(cin, tem_line))
    {
        vct.push_back(tem_line);
    }
    pan();
//    for(int i = 1; i < vct.size()-1; i++)     //处理结果集
//    {
//        if(ok[i] == 0)
//        {
//            if(ok[i-1] != 0 && ok[i+1] != 0)
//                ok[i] = 1;
//        }
//    }
    int len = vct.size();
    if(ok[0] == 0 && ok[1] == 1) ok[0] = 1;
    if(ok[len-1] == 0 && ok[len-2] == 1) ok[len-1] = 1;
//    for(int i = 0; i < len; i++)
//    {
//        cout << ok[i] << endl;
//    }
    for(int i = 0; i < len; i++)
    {
        if(ok[i]) cout << vct[i] << endl;
        else
            prt(i);
    }
    return 0;
}


#include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> P;
typedef long long LL;
#define INF 0x3f3f3f3f
#define PI acos(-1)
#define MAX_N 1050000
//#define LOCAL
vector<string> vct;
bool ok[MAX_N];
void pan()
{
    for(int i = 0; i < vct.size(); i++)
    {
        string now = vct[i];
        bool flag = 0;
        for(int j = 0; j < now.length(); j++)
        {
            if(now[j] != 13 && now[j] != 10 && now[j] != 32)
            {
                if(now[j] == '#')
                flag = 1;
                break;
            }
        }
        ok[i] = flag;       //如果是特殊行
    }
}
void prt(int d)
{
    string now = vct[d];
    for(int i = 0; i < now.length(); i++)
    {
        if(now[i] == 32 || now[i] == 10 || now[i] == 13)
            continue;
        cout << now[i];
    }
//    if(d != vct.size()-1 && ok[d+1] == 1)       //换行
//        cout << endl;
//    if(d == vct.size()-1 && ok[d-1] == 0)
//        cout << endl;
}
int main()
{
	#ifdef LOCAL
		freopen("b:\\data.in.txt", "r", stdin);
	#endif
	string tem_line;
    while(getline(cin, tem_line))
    {
        vct.push_back(tem_line);
    }
    pan();
    for(int i = 1; i < vct.size()-1; i++)     //处理结果集
    {
        if(ok[i] == 0)
        {
            if(ok[i-1] != 0 && ok[i+1] != 0)
                ok[i] = 1;
        }
    }
    int len = vct.size();
    if(ok[0] == 0 && ok[1] == 1) ok[0] = 1;
    if(ok[len-1] == 0 && ok[len-2] == 1) ok[len-1] = 1;
//    for(int i = 0; i < len; i++)
//    {
//        cout << ok[i] << endl;
//    }
    for(int i = 0; i < len; i++)
    {
        if(ok[i]) cout << vct[i] << endl;
        else
            prt(i);
    }
    return 0;
}


#include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> P;
typedef long long LL;
#define INF 0x3f3f3f3f
#define PI acos(-1)
#define MAX_N 1050000
//#define LOCAL
vector<string> vct;
bool ok[MAX_N];
void pan()
{
    for(int i = 0; i < vct.size(); i++)
    {
        string now = vct[i];
        bool flag = 0;
        for(int j = 0; j < now.length(); j++)
        {
            if(now[j] != 13 && now[j] != 10 && now[j] != 32)
            {
                if(now[j] == '#')
                flag = 1;
                break;
            }
        }
        ok[i] = flag;       //如果是特殊行
    }
}
void prt(int d)
{
    string now = vct[d];
    for(int i = 0; i < now.length(); i++)
    {
        if(now[i] == 32)
            continue;
        cout << now[i];
    }
    if(d != vct.size()-1 && ok[d+1] == 1)       //换行
        cout << endl;
    if(d == vct.size()-1 && ok[d-1] == 0)
        cout << endl;
}
int main()
{
	#ifdef LOCAL
		freopen("b:\\data.in.txt", "r", stdin);
	#endif
	string tem_line;
    while(getline(cin, tem_line))
    {
        vct.push_back(tem_line);
    }
    pan();
//    for(int i = 1; i < vct.size()-1; i++)     //处理结果集
//    {
//        if(ok[i] == 0)
//        {
//            if(ok[i-1] != 0 && ok[i+1] != 0)
//                ok[i] = 1;
//        }
//    }
    int len = vct.size();
    if(ok[0] == 0 && ok[1] == 1) ok[0] = 1;
    if(ok[len-1] == 0 && ok[len-2] == 1) ok[len-1] = 1;
//    for(int i = 0; i < len; i++)
//    {
//        cout << ok[i] << endl;
//    }
    for(int i = 0; i < len; i++)
    {
        if(i == 0)
        {
            prt(i);
            continue;
        }
        if(ok[i]) cout << vct[i] << endl;
        else
            prt(i);
    }
    return 0;
}


#include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> P;
typedef long long LL;
#define INF 0x3f3f3f3f
#define PI acos(-1)
#define MAX_N 1050000
//#define LOCAL
vector<string> vct;
bool ok[MAX_N];
void pan()
{
    for(int i = 0; i < vct.size(); i++)
    {
        string now = vct[i];
        bool flag = 0;
        for(int j = 0; j < now.length(); j++)
        {
            if(now[j] != 13 && now[j] != 10 && now[j] != 32)
            {
                if(now[j] == '#')
                flag = 1;
                break;
            }
        }
        ok[i] = flag;       //如果是特殊行
    }
}
void prt(int d)
{
    string now = vct[d];
    for(int i = 0; i < now.length(); i++)
    {
        if(now[i] == 32 || now[i] == 10 || now[i] == 13)
            continue;
        cout << now[i];
    }
    if(d != vct.size()-1 && ok[d+1] == 1)       //换行
        cout << endl;
    if(d == vct.size()-1 && ok[d-1] == 0)
        cout << endl;
}
int main()
{
	#ifdef LOCAL
		freopen("b:\\data.in.txt", "r", stdin);
	#endif
	string tem_line;
    while(getline(cin, tem_line))
    {
        vct.push_back(tem_line);
    }
    pan();
    for(int i = 1; i < vct.size()-1; i++)     //处理结果集
    {
        if(ok[i] == 0)
        {
            if(ok[i-1] != 0 && ok[i+1] != 0)
                ok[i] = 1;
        }
    }
    int len = vct.size();
    if(ok[0] == 0 && ok[1] == 1) ok[0] = 1;
    if(ok[len-1] == 0 && ok[len-2] == 1) ok[len-1] = 1;
//    for(int i = 0; i < len; i++)
//    {
//        cout << ok[i] << endl;
//    }
    for(int i = 0; i < len; i++)
    {
        if(ok[i]) cout << vct[i] << endl;
        else
            prt(i);
    }
    return 0;
}


#include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> P;
typedef long long LL;
#define INF 0x3f3f3f3f
#define PI acos(-1)
#define MAX_N 1050000
//#define LOCAL
vector<string> vct;
bool ok[MAX_N];
void pan()
{
    for(int i = 0; i < vct.size(); i++)
    {
        string now = vct[i];
        bool flag = 0;
        for(int j = 0; j < now.length(); j++)
        {
            if(now[j] != 13 && now[j] != 10 && now[j] != 32)
            {
                if(now[j] == '#')
                flag = 1;
                break;
            }
        }
        ok[i] = flag;       //如果是特殊行
    }
}
void prt(int d)
{
    string now = vct[d];
    for(int i = 0; i < now.length(); i++)
    {
        if(now[i] == 32)
            continue;
        cout << now[i];
    }
    if(d != vct.size()-1 && ok[d+1] == 1)       //换行
        cout << endl;
    if(d == vct.size()-1)
        cout << endl;
}
int main()
{
	#ifdef LOCAL
		freopen("b:\\data.in.txt", "r", stdin);
	#endif
	string tem_line;
    while(getline(cin, tem_line))
    {
        vct.push_back(tem_line);
    }
    pan();
//    for(int i = 1; i < vct.size()-1; i++)     //处理结果集
//    {
//        if(ok[i] == 0)
//        {
//            if(ok[i-1] != 0 && ok[i+1] != 0)
//                ok[i] = 1;
//        }
//    }
    int len = vct.size();
//    if(ok[0] == 0 && ok[1] == 1) ok[0] = 1;
//    if(ok[len-1] == 0 && ok[len-2] == 1) ok[len-1] = 1;
//    for(int i = 0; i < len; i++)
//    {
//        cout << ok[i] << endl;
//    }
    for(int i = 0; i < len; i++)
    {
        if(ok[i]) cout << vct[i] << endl;
        else
            prt(i);
    }
    return 0;
}


#include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> P;
typedef long long LL;
#define INF 0x3f3f3f3f
#define PI acos(-1)
#define MAX_N 1050000
//#define LOCAL
vector<string> vct;
bool ok[MAX_N];
void pan()
{
    for(int i = 0; i < vct.size(); i++)
    {
        string now = vct[i];
        bool flag = 0;
        for(int j = 0; j < now.length(); j++)
        {
            if(now[j] != 13 && now[j] != 10 && now[j] != 32)
            {
                if(now[j] == '#')
                flag = 1;
                break;
            }
        }
        ok[i] = flag;       //如果是特殊行
    }
}
void prt(int d)
{
    string now = vct[d];
    for(int i = 0; i < now.length(); i++)
    {
        if(now[i] == ' ')
            continue;
        cout << now[i];
    }
    if(d != vct.size()-1 && ok[d+1] == 1)       //换行
        cout << endl;
//    if(d == vct.size()-1 && ok[d-1] == 0)
//        cout << endl;
}
int main()
{
	#ifdef LOCAL
		freopen("b:\\data.in.txt", "r", stdin);
	#endif
	string tem_line;
    while(getline(cin, tem_line))
    {
        vct.push_back(tem_line);
    }
    pan();
    for(int i = 1; i < vct.size()-1; i++)     //处理结果集
    {
        if(ok[i] == 0)
        {
            if(ok[i-1] != 0 && ok[i+1] != 0)
                ok[i] = 1;
        }
    }
    int len = vct.size();
    if(ok[0] == 0 && ok[1] == 1) ok[0] = 1;
    if(ok[len-1] == 0 && ok[len-2] == 1) ok[len-1] = 1;
//    for(int i = 0; i < len; i++)
//    {
//        cout << ok[i] << endl;
//    }
    for(int i = 0; i < len; i++)
    {
        if(ok[i]) cout << vct[i] << endl;
        else
            prt(i);
    }
    return 0;
}


#include <set>
#include <bitset>
#include <queue>
#include <deque>
#include <set>
#include <bitset>
#include <queue>
#include <deque>
#include <stack>
#include <sstream>
#include <iostream>
#include <iomanip>

#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <ctime>
#include <cstring>
#include <string>
#include <cassert>

#include <vector>
#include <list>
#include <map>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>

using namespace std;

typedef vector <int> vi;
typedef vector <vi> vvi;
typedef pair <int, int> ii;
typedef vector <string> vs;
typedef long long int64; //NOTES:int64
typedef unsigned long long uint64; //NOTES:uint64
const double pi = acos(-1.0); //NOTES:pi
const double eps = 1e-11; //NOTES:eps
const int MAXI = 2 << 29;

#define FORN(i,a,b)     for (int i=(a),_b=(b); i<_b; i++)
#define RFORN(i,b,a)    for (int i=(b)-1,_a=(a); i>=_a; i--)
#define RESET(a,b)      memset((a),(b),sizeof(a))

#define SC(x)           scanf("%d",&x)
#define SC2(x,y)        scanf("%d %d",&x,&y)
#define PR(x)           printf("%d ",x)
#define PR2(x,y)        printf("%d %d ",x,y)
#define PRS(x)          printf("%s",x)
#define END             printf("\n")
#define EXIT(x)         {PRS(x);return 0;}
#define DBG(x)          {cerr << "--> " << #x << " = " << x << endl;}

#define fi              first
#define se              second
#define PB              push_back
#define ALL(x)          (x).begin(),(x).end()
#define MP(X,Y)         make_pair(X,Y)//NOTES:MP(
#define foreach(i, c)   for(typeof((c).begin()) i = (c).begin(); i != (c).end(); i++)
#define present(c, x)   ((c).find(x) != (c).end())

int compare (const void *a, const void *b){
    return (*(int*)a-*(int*)b);
}

void startDBG(){
    PRS("------------------- Start Debug -------------------\n\n");
}

void endDBG(){
    PRS("\n\n------------------- End Debug -------------------\n");
}

template<class T> inline void DebM(T A[], T ii, T jj){//Debug sequence
    END;PRS("----------------DEBUG----------------");END;
    FORN (i,ii,jj) cout<<A[i]<<" ";
    END;PRS("-------------------------------------");END;
}
//Template code by ACRush
template<class T> inline bool isPrimeNumber(T n)//NOTES:isPrimeNumber(
{
    if (n <= 1)return false;
    for (T i = 2; i * i <= n; i++) if (n % i == 0) return false;
    return true;
}

template<class T> inline void checkmin(T &a, T b) {
    if (b < a) a = b;
}//NOTES:checkmin(

template<class T> inline void checkmax(T &a, T b) {
    if (b > a) a = b;
}//NOTES:checkmax(

template<class T> inline T sqr(T x) {
    return x*x;
}//NOTES:sqr

template<class T> inline T lowbit(T n) {
    return (n^(n - 1))&n;
}//NOTES:lowbit(

template<class T> inline int countbit(T n) {
    return (n == 0) ? 0 : (1 + countbit(n & (n - 1)));
}//NOTES:countbit(
//Numberic Functions

int64 C(int64 m, int64 n){
    int64 tot = 1;
    int64 i = m;
    while (i > m - n)
        tot *= i--;
    i = n;
    while (i > 1) tot /= i--;
    return tot;
}

template<class T> inline T gcd(T a, T b)//NOTES:gcd(
{
    if (a < 0)return gcd(-a, b);
    if (b < 0)return gcd(a, -b);
    return (b == 0) ? a : gcd(b, a % b);
}

template<class T> inline T lcm(T a, T b)//NOTES:lcm(
{
    if (a < 0)return lcm(-a, b);
    if (b < 0)return lcm(a, -b);
    return a * (b / gcd(a, b));
}

template<class T> inline T euclide(T a, T b, T &x, T &y)//NOTES:euclide(
{
    if (a < 0) {
        T d = euclide(-a, b, x, y);
        x = -x;
        return d;
    }
    if (b < 0) {
        T d = euclide(a, -b, x, y);
        y = -y;
        return d;
    }
    if (b == 0) {
        x = 1;
        y = 0;
        return a;
    } else {
        T d = euclide(b, a % b, x, y);
        T t = x;
        x = y;
        y = t - (a / b) * y;
        return d;
    }
}

template<class T> inline vector<pair<T, int> > factorize(T n)//NOTES:factorize(
{
    vector<pair<T, int> > R;
    for (T i = 2; n > 1;) {
        if (n % i == 0) {
            int C = 0;
            for (; n % i == 0; C++, n /= i);
            R.push_back(make_pair(i, C));
        }
        i++;
        if (i > n / i) i = n;
    }
    if (n > 1) R.push_back(make_pair(n, 1));
    return R;
}

template<class T> inline T eularFunction(T n)//NOTES:eularFunction(
{
    vector<pair<T, int> > R = factorize(n);
    T r = n;
    for (int i = 0; i < R.size(); i++)r = r / R[i].first * (R[i].first - 1);
    return r;
}

//Matrix Operations
const int MaxMatrixSize = 40; //NOTES:MaxMatrixSize

template<class T> inline void showMatrix(int n, T A[MaxMatrixSize][MaxMatrixSize])//NOTES:showMatrix(
{
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++)cout << A[i][j];
        cout << endl;
    }
}

template<class T> inline T checkMod(T n, T m) {
    return (n % m + m) % m;
}//NOTES:checkMod(

template<class T> inline void identityMatrix(int n, T A[MaxMatrixSize][MaxMatrixSize])//NOTES:identityMatrix(
{
    for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) A[i][j] = (i == j) ? 1 : 0;
}

template<class T> inline void addMatrix(int n, T C[MaxMatrixSize][MaxMatrixSize], T A[MaxMatrixSize][MaxMatrixSize], T B[MaxMatrixSize][MaxMatrixSize])//NOTES:addMatrix(
{
    for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) C[i][j] = A[i][j] + B[i][j];
}

template<class T> inline void subMatrix(int n, T C[MaxMatrixSize][MaxMatrixSize], T A[MaxMatrixSize][MaxMatrixSize], T B[MaxMatrixSize][MaxMatrixSize])//NOTES:subMatrix(
{
    for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) C[i][j] = A[i][j] - B[i][j];
}

template<class T> inline void mulMatrix(int n, T C[MaxMatrixSize][MaxMatrixSize], T _A[MaxMatrixSize][MaxMatrixSize], T _B[MaxMatrixSize][MaxMatrixSize])//NOTES:mulMatrix(
{
    T A[MaxMatrixSize][MaxMatrixSize], B[MaxMatrixSize][MaxMatrixSize];
    for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) A[i][j] = _A[i][j], B[i][j] = _B[i][j], C[i][j] = 0;
    for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) for (int k = 0; k < n; k++) C[i][j] += A[i][k] * B[k][j];
}

template<class T> inline void addModMatrix(int n, T m, T C[MaxMatrixSize][MaxMatrixSize], T A[MaxMatrixSize][MaxMatrixSize], T B[MaxMatrixSize][MaxMatrixSize])//NOTES:addModMatrix(
{
    for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) C[i][j] = checkMod(A[i][j] + B[i][j], m);
}

template<class T> inline void subModMatrix(int n, T m, T C[MaxMatrixSize][MaxMatrixSize], T A[MaxMatrixSize][MaxMatrixSize], T B[MaxMatrixSize][MaxMatrixSize])//NOTES:subModMatrix(
{
    for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) C[i][j] = checkMod(A[i][j] - B[i][j], m);
}

template<class T> inline T multiplyMod(T a, T b, T m) {
    return (T) ((((int64) (a)*(int64) (b) % (int64) (m))+(int64) (m)) % (int64) (m));
}//NOTES:multiplyMod(

template<class T> inline void mulModMatrix(int n, T m, T C[MaxMatrixSize][MaxMatrixSize], T _A[MaxMatrixSize][MaxMatrixSize], T _B[MaxMatrixSize][MaxMatrixSize])//NOTES:mulModMatrix(
{
    T A[MaxMatrixSize][MaxMatrixSize], B[MaxMatrixSize][MaxMatrixSize];
    for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) A[i][j] = _A[i][j], B[i][j] = _B[i][j], C[i][j] = 0;
    for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) for (int k = 0; k < n; k++) C[i][j] = (C[i][j] + multiplyMod(A[i][k], B[k][j], m)) % m;
}

template<class T> inline T powerMod(T p, int e, T m)//NOTES:powerMod(
{
    if (e == 0)return 1 % m;
    else if (e % 2 == 0) {
        T t = powerMod(p, e / 2, m);
        return multiplyMod(t, t, m);
    } else return multiplyMod(powerMod(p, e - 1, m), p, m);
}
//Point&Line

double dist(double x1, double y1, double x2, double y2) {
    return sqrt(sqr(x1 - x2) + sqr(y1 - y2));
}//NOTES:dist(

double distR(double x1, double y1, double x2, double y2) {
    return sqr(x1 - x2) + sqr(y1 - y2);
}//NOTES:distR(

template<class T> T cross(T x0, T y0, T x1, T y1, T x2, T y2) {
    return (x1 - x0)*(y2 - y0)-(x2 - x0)*(y1 - y0);
}//NOTES:cross(

int crossOper(double x0, double y0, double x1, double y1, double x2, double y2)//NOTES:crossOper(
{
    double t = (x1 - x0)*(y2 - y0)-(x2 - x0)*(y1 - y0);
    if (fabs(t) <= eps) return 0;
    return (t < 0) ? -1 : 1;
}

bool isIntersect(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4)//NOTES:isIntersect(
{
    return crossOper(x1, y1, x2, y2, x3, y3) * crossOper(x1, y1, x2, y2, x4, y4) < 0 && crossOper(x3, y3, x4, y4, x1, y1) * crossOper(x3, y3, x4, y4, x2, y2) < 0;
}

bool isMiddle(double s, double m, double t) {
    return fabs(s - m) <= eps | fabs(t - m) <= eps | (s < m) != (t < m);
}//NOTES:isMiddle(
//Translator

bool isUpperCase(char c) {
    return c >= 'A' && c <= 'Z';
}//NOTES:isUpperCase(

bool isLowerCase(char c) {
    return c >= 'a' && c <= 'z';
}//NOTES:isLowerCase(

bool isLetter(char c) {
    return c >= 'A' && c <= 'Z' | c >= 'a' && c <= 'z';
}//NOTES:isLetter(

bool isDigit(char c) {
    return c >= '0' && c <= '9';
}//NOTES:isDigit(

char toLowerCase(char c) {
    return (isUpperCase(c)) ? (c + 32) : c;
}//NOTES:toLowerCase(

char toUpperCase(char c) {
    return (isLowerCase(c)) ? (c - 32) : c;
}//NOTES:toUpperCase(

template<class T> string toString(T n) {
    ostringstream ost;
    ost << n;
    ost.flush();
    return ost.str();
}//NOTES:toString(

int toInt(string s) {
    int r = 0;
    istringstream sin(s);
    sin >> r;
    return r;
}//NOTES:toInt(

int64 toInt64(string s) {
    int64 r = 0;
    istringstream sin(s);
    sin >> r;
    return r;
}//NOTES:toInt64(

double toDouble(string s) {
    double r = 0;
    istringstream sin(s);
    sin >> r;
    return r;
}//NOTES:toDouble(

template<class T> void stoa(string s, int &n, T A[]) {
    n = 0;
    istringstream sin(s);
    for (T v; sin >> v; A[n++] = v);
}//NOTES:stoa(

template<class T> void atos(int n, T A[], string &s) {
    ostringstream sout;
    for (int i = 0; i < n; i++) {
        if (i > 0)sout << ' ';
        sout << A[i];
    }
    s = sout.str();
}//NOTES:atos(

template<class T> void atov(int n, T A[], vector<T> &vi) {
    vi.clear();
    for (int i = 0; i < n; i++) vi.push_back(A[i]);
}//NOTES:atov(

template<class T> void vtoa(vector<T> vi, int &n, T A[]) {
    n = vi.size();
    for (int i = 0; i < n; i++)A[i] = vi[i];
}//NOTES:vtoa(

template<class T> void stov(string s, vector<T> &vi) {
    vi.clear();
    istringstream sin(s);
    for (T v; sin >> v; vi.push_back(v));
}//NOTES:stov(

template<class T> void vtos(vector<T> vi, string &s) {
    ostringstream sout;
    for (int i = 0; i < vi.size(); i++) {
        if (i > 0)sout << ' ';
        sout << vi[i];
    }
    s = sout.str();
}//NOTES:vtos(
//Fraction

template<class T> struct Fraction {
    T a, b;
    Fraction(T a = 0, T b = 1);
    string toString();
}; //NOTES:Fraction

template<class T> Fraction<T>::Fraction(T a, T b) {
    T d = gcd(a, b);
    a /= d;
    b /= d;
    if (b < 0) a = -a, b = -b;
    this->a = a;
    this->b = b;
}

template<class T> string Fraction<T>::toString() {
    ostringstream sout;
    sout << a << "/" << b;
    return sout.str();
}

template<class T> Fraction<T> operator+(Fraction<T> p, Fraction<T> q) {
    return Fraction<T > (p.a * q.b + q.a * p.b, p.b * q.b);
}

template<class T> Fraction<T> operator-(Fraction<T> p, Fraction<T> q) {
    return Fraction<T > (p.a * q.b - q.a * p.b, p.b * q.b);
}

template<class T> Fraction<T> operator*(Fraction<T> p, Fraction<T> q) {
    return Fraction<T > (p.a * q.a, p.b * q.b);
}

template<class T> Fraction<T> operator/(Fraction<T> p, Fraction<T> q) {
    return Fraction<T > (p.a * q.b, p.b * q.a);
}
//Template code by ACRush

bool isSpell(string s){
    vs tam;
    stov(s, tam);
    if (!tam.empty() && tam[0].find("#") == 0) return true;
    return false;
}

int main(){
    //freopen ("INP.txt", "r", stdin);
    //freopen ("OUT.txt", "w", stdout);
    string s;
    vs luu;
    while (getline(cin, s)) luu.PB(s);
    vs spell, other;
    int i = 0;
    while (i < luu.size()){
        if (i < luu.size() && isSpell(luu[i])){
            cout << luu[i];
            i++;
        }
        else{
            while (i < luu.size() && !isSpell(luu[i])){
                vs tam;
                stov(luu[i], tam);
                FORN (j, 0, tam.size()) cout << tam[j];
                i++;
            }
        }
        if (i <= luu.size()) cout << endl;
    }
}


#include <set>
#include <bitset>
#include <queue>
#include <deque>
#include <set>
#include <bitset>
#include <queue>
#include <deque>
#include <stack>
#include <sstream>
#include <iostream>
#include <iomanip>

#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <ctime>
#include <cstring>
#include <string>
#include <cassert>

#include <vector>
#include <list>
#include <map>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>

using namespace std;

typedef vector <int> vi;
typedef vector <vi> vvi;
typedef pair <int, int> ii;
typedef vector <string> vs;
typedef long long int64; //NOTES:int64
typedef unsigned long long uint64; //NOTES:uint64
const double pi = acos(-1.0); //NOTES:pi
const double eps = 1e-11; //NOTES:eps
const int MAXI = 2 << 29;

#define FORN(i,a,b)     for (int i=(a),_b=(b); i<_b; i++)
#define RFORN(i,b,a)    for (int i=(b)-1,_a=(a); i>=_a; i--)
#define RESET(a,b)      memset((a),(b),sizeof(a))

#define SC(x)           scanf("%d",&x)
#define SC2(x,y)        scanf("%d %d",&x,&y)
#define PR(x)           printf("%d ",x)
#define PR2(x,y)        printf("%d %d ",x,y)
#define PRS(x)          printf("%s",x)
#define END             printf("\n")
#define EXIT(x)         {PRS(x);return 0;}
#define DBG(x)          {cerr << "--> " << #x << " = " << x << endl;}

#define fi              first
#define se              second
#define PB              push_back
#define ALL(x)          (x).begin(),(x).end()
#define MP(X,Y)         make_pair(X,Y)//NOTES:MP(
#define foreach(i, c)   for(typeof((c).begin()) i = (c).begin(); i != (c).end(); i++)
#define present(c, x)   ((c).find(x) != (c).end())

int compare (const void *a, const void *b){
    return (*(int*)a-*(int*)b);
}

void startDBG(){
    PRS("------------------- Start Debug -------------------\n\n");
}

void endDBG(){
    PRS("\n\n------------------- End Debug -------------------\n");
}

template<class T> inline void DebM(T A[], T ii, T jj){//Debug sequence
    END;PRS("----------------DEBUG----------------");END;
    FORN (i,ii,jj) cout<<A[i]<<" ";
    END;PRS("-------------------------------------");END;
}
//Template code by ACRush
template<class T> inline bool isPrimeNumber(T n)//NOTES:isPrimeNumber(
{
    if (n <= 1)return false;
    for (T i = 2; i * i <= n; i++) if (n % i == 0) return false;
    return true;
}

template<class T> inline void checkmin(T &a, T b) {
    if (b < a) a = b;
}//NOTES:checkmin(

template<class T> inline void checkmax(T &a, T b) {
    if (b > a) a = b;
}//NOTES:checkmax(

template<class T> inline T sqr(T x) {
    return x*x;
}//NOTES:sqr

template<class T> inline T lowbit(T n) {
    return (n^(n - 1))&n;
}//NOTES:lowbit(

template<class T> inline int countbit(T n) {
    return (n == 0) ? 0 : (1 + countbit(n & (n - 1)));
}//NOTES:countbit(
//Numberic Functions

int64 C(int64 m, int64 n){
    int64 tot = 1;
    int64 i = m;
    while (i > m - n)
        tot *= i--;
    i = n;
    while (i > 1) tot /= i--;
    return tot;
}

template<class T> inline T gcd(T a, T b)//NOTES:gcd(
{
    if (a < 0)return gcd(-a, b);
    if (b < 0)return gcd(a, -b);
    return (b == 0) ? a : gcd(b, a % b);
}

template<class T> inline T lcm(T a, T b)//NOTES:lcm(
{
    if (a < 0)return lcm(-a, b);
    if (b < 0)return lcm(a, -b);
    return a * (b / gcd(a, b));
}

template<class T> inline T euclide(T a, T b, T &x, T &y)//NOTES:euclide(
{
    if (a < 0) {
        T d = euclide(-a, b, x, y);
        x = -x;
        return d;
    }
    if (b < 0) {
        T d = euclide(a, -b, x, y);
        y = -y;
        return d;
    }
    if (b == 0) {
        x = 1;
        y = 0;
        return a;
    } else {
        T d = euclide(b, a % b, x, y);
        T t = x;
        x = y;
        y = t - (a / b) * y;
        return d;
    }
}

template<class T> inline vector<pair<T, int> > factorize(T n)//NOTES:factorize(
{
    vector<pair<T, int> > R;
    for (T i = 2; n > 1;) {
        if (n % i == 0) {
            int C = 0;
            for (; n % i == 0; C++, n /= i);
            R.push_back(make_pair(i, C));
        }
        i++;
        if (i > n / i) i = n;
    }
    if (n > 1) R.push_back(make_pair(n, 1));
    return R;
}

template<class T> inline T eularFunction(T n)//NOTES:eularFunction(
{
    vector<pair<T, int> > R = factorize(n);
    T r = n;
    for (int i = 0; i < R.size(); i++)r = r / R[i].first * (R[i].first - 1);
    return r;
}

//Matrix Operations
const int MaxMatrixSize = 40; //NOTES:MaxMatrixSize

template<class T> inline void showMatrix(int n, T A[MaxMatrixSize][MaxMatrixSize])//NOTES:showMatrix(
{
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++)cout << A[i][j];
        cout << endl;
    }
}

template<class T> inline T checkMod(T n, T m) {
    return (n % m + m) % m;
}//NOTES:checkMod(

template<class T> inline void identityMatrix(int n, T A[MaxMatrixSize][MaxMatrixSize])//NOTES:identityMatrix(
{
    for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) A[i][j] = (i == j) ? 1 : 0;
}

template<class T> inline void addMatrix(int n, T C[MaxMatrixSize][MaxMatrixSize], T A[MaxMatrixSize][MaxMatrixSize], T B[MaxMatrixSize][MaxMatrixSize])//NOTES:addMatrix(
{
    for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) C[i][j] = A[i][j] + B[i][j];
}

template<class T> inline void subMatrix(int n, T C[MaxMatrixSize][MaxMatrixSize], T A[MaxMatrixSize][MaxMatrixSize], T B[MaxMatrixSize][MaxMatrixSize])//NOTES:subMatrix(
{
    for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) C[i][j] = A[i][j] - B[i][j];
}

template<class T> inline void mulMatrix(int n, T C[MaxMatrixSize][MaxMatrixSize], T _A[MaxMatrixSize][MaxMatrixSize], T _B[MaxMatrixSize][MaxMatrixSize])//NOTES:mulMatrix(
{
    T A[MaxMatrixSize][MaxMatrixSize], B[MaxMatrixSize][MaxMatrixSize];
    for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) A[i][j] = _A[i][j], B[i][j] = _B[i][j], C[i][j] = 0;
    for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) for (int k = 0; k < n; k++) C[i][j] += A[i][k] * B[k][j];
}

template<class T> inline void addModMatrix(int n, T m, T C[MaxMatrixSize][MaxMatrixSize], T A[MaxMatrixSize][MaxMatrixSize], T B[MaxMatrixSize][MaxMatrixSize])//NOTES:addModMatrix(
{
    for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) C[i][j] = checkMod(A[i][j] + B[i][j], m);
}

template<class T> inline void subModMatrix(int n, T m, T C[MaxMatrixSize][MaxMatrixSize], T A[MaxMatrixSize][MaxMatrixSize], T B[MaxMatrixSize][MaxMatrixSize])//NOTES:subModMatrix(
{
    for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) C[i][j] = checkMod(A[i][j] - B[i][j], m);
}

template<class T> inline T multiplyMod(T a, T b, T m) {
    return (T) ((((int64) (a)*(int64) (b) % (int64) (m))+(int64) (m)) % (int64) (m));
}//NOTES:multiplyMod(

template<class T> inline void mulModMatrix(int n, T m, T C[MaxMatrixSize][MaxMatrixSize], T _A[MaxMatrixSize][MaxMatrixSize], T _B[MaxMatrixSize][MaxMatrixSize])//NOTES:mulModMatrix(
{
    T A[MaxMatrixSize][MaxMatrixSize], B[MaxMatrixSize][MaxMatrixSize];
    for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) A[i][j] = _A[i][j], B[i][j] = _B[i][j], C[i][j] = 0;
    for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) for (int k = 0; k < n; k++) C[i][j] = (C[i][j] + multiplyMod(A[i][k], B[k][j], m)) % m;
}

template<class T> inline T powerMod(T p, int e, T m)//NOTES:powerMod(
{
    if (e == 0)return 1 % m;
    else if (e % 2 == 0) {
        T t = powerMod(p, e / 2, m);
        return multiplyMod(t, t, m);
    } else return multiplyMod(powerMod(p, e - 1, m), p, m);
}
//Point&Line

double dist(double x1, double y1, double x2, double y2) {
    return sqrt(sqr(x1 - x2) + sqr(y1 - y2));
}//NOTES:dist(

double distR(double x1, double y1, double x2, double y2) {
    return sqr(x1 - x2) + sqr(y1 - y2);
}//NOTES:distR(

template<class T> T cross(T x0, T y0, T x1, T y1, T x2, T y2) {
    return (x1 - x0)*(y2 - y0)-(x2 - x0)*(y1 - y0);
}//NOTES:cross(

int crossOper(double x0, double y0, double x1, double y1, double x2, double y2)//NOTES:crossOper(
{
    double t = (x1 - x0)*(y2 - y0)-(x2 - x0)*(y1 - y0);
    if (fabs(t) <= eps) return 0;
    return (t < 0) ? -1 : 1;
}

bool isIntersect(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4)//NOTES:isIntersect(
{
    return crossOper(x1, y1, x2, y2, x3, y3) * crossOper(x1, y1, x2, y2, x4, y4) < 0 && crossOper(x3, y3, x4, y4, x1, y1) * crossOper(x3, y3, x4, y4, x2, y2) < 0;
}

bool isMiddle(double s, double m, double t) {
    return fabs(s - m) <= eps | fabs(t - m) <= eps | (s < m) != (t < m);
}//NOTES:isMiddle(
//Translator

bool isUpperCase(char c) {
    return c >= 'A' && c <= 'Z';
}//NOTES:isUpperCase(

bool isLowerCase(char c) {
    return c >= 'a' && c <= 'z';
}//NOTES:isLowerCase(

bool isLetter(char c) {
    return c >= 'A' && c <= 'Z' | c >= 'a' && c <= 'z';
}//NOTES:isLetter(

bool isDigit(char c) {
    return c >= '0' && c <= '9';
}//NOTES:isDigit(

char toLowerCase(char c) {
    return (isUpperCase(c)) ? (c + 32) : c;
}//NOTES:toLowerCase(

char toUpperCase(char c) {
    return (isLowerCase(c)) ? (c - 32) : c;
}//NOTES:toUpperCase(

template<class T> string toString(T n) {
    ostringstream ost;
    ost << n;
    ost.flush();
    return ost.str();
}//NOTES:toString(

int toInt(string s) {
    int r = 0;
    istringstream sin(s);
    sin >> r;
    return r;
}//NOTES:toInt(

int64 toInt64(string s) {
    int64 r = 0;
    istringstream sin(s);
    sin >> r;
    return r;
}//NOTES:toInt64(

double toDouble(string s) {
    double r = 0;
    istringstream sin(s);
    sin >> r;
    return r;
}//NOTES:toDouble(

template<class T> void stoa(string s, int &n, T A[]) {
    n = 0;
    istringstream sin(s);
    for (T v; sin >> v; A[n++] = v);
}//NOTES:stoa(

template<class T> void atos(int n, T A[], string &s) {
    ostringstream sout;
    for (int i = 0; i < n; i++) {
        if (i > 0)sout << ' ';
        sout << A[i];
    }
    s = sout.str();
}//NOTES:atos(

template<class T> void atov(int n, T A[], vector<T> &vi) {
    vi.clear();
    for (int i = 0; i < n; i++) vi.push_back(A[i]);
}//NOTES:atov(

template<class T> void vtoa(vector<T> vi, int &n, T A[]) {
    n = vi.size();
    for (int i = 0; i < n; i++)A[i] = vi[i];
}//NOTES:vtoa(

template<class T> void stov(string s, vector<T> &vi) {
    vi.clear();
    istringstream sin(s);
    for (T v; sin >> v; vi.push_back(v));
}//NOTES:stov(

template<class T> void vtos(vector<T> vi, string &s) {
    ostringstream sout;
    for (int i = 0; i < vi.size(); i++) {
        if (i > 0)sout << ' ';
        sout << vi[i];
    }
    s = sout.str();
}//NOTES:vtos(
//Fraction

template<class T> struct Fraction {
    T a, b;
    Fraction(T a = 0, T b = 1);
    string toString();
}; //NOTES:Fraction

template<class T> Fraction<T>::Fraction(T a, T b) {
    T d = gcd(a, b);
    a /= d;
    b /= d;
    if (b < 0) a = -a, b = -b;
    this->a = a;
    this->b = b;
}

template<class T> string Fraction<T>::toString() {
    ostringstream sout;
    sout << a << "/" << b;
    return sout.str();
}

template<class T> Fraction<T> operator+(Fraction<T> p, Fraction<T> q) {
    return Fraction<T > (p.a * q.b + q.a * p.b, p.b * q.b);
}

template<class T> Fraction<T> operator-(Fraction<T> p, Fraction<T> q) {
    return Fraction<T > (p.a * q.b - q.a * p.b, p.b * q.b);
}

template<class T> Fraction<T> operator*(Fraction<T> p, Fraction<T> q) {
    return Fraction<T > (p.a * q.a, p.b * q.b);
}

template<class T> Fraction<T> operator/(Fraction<T> p, Fraction<T> q) {
    return Fraction<T > (p.a * q.b, p.b * q.a);
}
//Template code by ACRush

bool isSpell(string s){
    vs tam;
    stov(s, tam);
    if (!tam.empty() && tam[0].find("#") == 0) return true;
    return false;
}

int main(){
    //freopen ("INP.txt", "r", stdin);
    //freopen ("OUT.txt", "w", stdout);
    string s;
    vs luu;
    while (getline(cin, s)) luu.PB(s);
    vs spell, other;
    int i = 0;
    while (i < luu.size()){
        if (i < luu.size() && isSpell(luu[i])){
            cout << luu[i];
            i++;
        }
        else{
            string s = "";
            while (i < luu.size() && !isSpell(luu[i])){
                vs tam;
                stov(luu[i], tam);
                FORN (j, 0, tam.size()) s = s + tam[j];
                i++;
            }
            cout << s;
        }
        if (i < luu.size()) cout << endl;
    }
}


#include <set>
#include <bitset>
#include <queue>
#include <deque>
#include <set>
#include <bitset>
#include <queue>
#include <deque>
#include <stack>
#include <sstream>
#include <iostream>
#include <iomanip>

#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <ctime>
#include <cstring>
#include <string>
#include <cassert>

#include <vector>
#include <list>
#include <map>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>

using namespace std;

typedef vector <int> vi;
typedef vector <vi> vvi;
typedef pair <int, int> ii;
typedef vector <string> vs;
typedef long long int64; //NOTES:int64
typedef unsigned long long uint64; //NOTES:uint64
const double pi = acos(-1.0); //NOTES:pi
const double eps = 1e-11; //NOTES:eps
const int MAXI = 2 << 29;

#define FORN(i,a,b)     for (int i=(a),_b=(b); i<_b; i++)
#define RFORN(i,b,a)    for (int i=(b)-1,_a=(a); i>=_a; i--)
#define RESET(a,b)      memset((a),(b),sizeof(a))

#define SC(x)           scanf("%d",&x)
#define SC2(x,y)        scanf("%d %d",&x,&y)
#define PR(x)           printf("%d ",x)
#define PR2(x,y)        printf("%d %d ",x,y)
#define PRS(x)          printf("%s",x)
#define END             printf("\n")
#define EXIT(x)         {PRS(x);return 0;}
#define DBG(x)          {cerr << "--> " << #x << " = " << x << endl;}

#define fi              first
#define se              second
#define PB              push_back
#define ALL(x)          (x).begin(),(x).end()
#define MP(X,Y)         make_pair(X,Y)//NOTES:MP(
#define foreach(i, c)   for(typeof((c).begin()) i = (c).begin(); i != (c).end(); i++)
#define present(c, x)   ((c).find(x) != (c).end())

int compare (const void *a, const void *b){
    return (*(int*)a-*(int*)b);
}

void startDBG(){
    PRS("------------------- Start Debug -------------------\n\n");
}

void endDBG(){
    PRS("\n\n------------------- End Debug -------------------\n");
}

template<class T> inline void DebM(T A[], T ii, T jj){//Debug sequence
    END;PRS("----------------DEBUG----------------");END;
    FORN (i,ii,jj) cout<<A[i]<<" ";
    END;PRS("-------------------------------------");END;
}
//Template code by ACRush
template<class T> inline bool isPrimeNumber(T n)//NOTES:isPrimeNumber(
{
    if (n <= 1)return false;
    for (T i = 2; i * i <= n; i++) if (n % i == 0) return false;
    return true;
}

template<class T> inline void checkmin(T &a, T b) {
    if (b < a) a = b;
}//NOTES:checkmin(

template<class T> inline void checkmax(T &a, T b) {
    if (b > a) a = b;
}//NOTES:checkmax(

template<class T> inline T sqr(T x) {
    return x*x;
}//NOTES:sqr

template<class T> inline T lowbit(T n) {
    return (n^(n - 1))&n;
}//NOTES:lowbit(

template<class T> inline int countbit(T n) {
    return (n == 0) ? 0 : (1 + countbit(n & (n - 1)));
}//NOTES:countbit(
//Numberic Functions

int64 C(int64 m, int64 n){
    int64 tot = 1;
    int64 i = m;
    while (i > m - n)
        tot *= i--;
    i = n;
    while (i > 1) tot /= i--;
    return tot;
}

template<class T> inline T gcd(T a, T b)//NOTES:gcd(
{
    if (a < 0)return gcd(-a, b);
    if (b < 0)return gcd(a, -b);
    return (b == 0) ? a : gcd(b, a % b);
}

template<class T> inline T lcm(T a, T b)//NOTES:lcm(
{
    if (a < 0)return lcm(-a, b);
    if (b < 0)return lcm(a, -b);
    return a * (b / gcd(a, b));
}

template<class T> inline T euclide(T a, T b, T &x, T &y)//NOTES:euclide(
{
    if (a < 0) {
        T d = euclide(-a, b, x, y);
        x = -x;
        return d;
    }
    if (b < 0) {
        T d = euclide(a, -b, x, y);
        y = -y;
        return d;
    }
    if (b == 0) {
        x = 1;
        y = 0;
        return a;
    } else {
        T d = euclide(b, a % b, x, y);
        T t = x;
        x = y;
        y = t - (a / b) * y;
        return d;
    }
}

template<class T> inline vector<pair<T, int> > factorize(T n)//NOTES:factorize(
{
    vector<pair<T, int> > R;
    for (T i = 2; n > 1;) {
        if (n % i == 0) {
            int C = 0;
            for (; n % i == 0; C++, n /= i);
            R.push_back(make_pair(i, C));
        }
        i++;
        if (i > n / i) i = n;
    }
    if (n > 1) R.push_back(make_pair(n, 1));
    return R;
}

template<class T> inline T eularFunction(T n)//NOTES:eularFunction(
{
    vector<pair<T, int> > R = factorize(n);
    T r = n;
    for (int i = 0; i < R.size(); i++)r = r / R[i].first * (R[i].first - 1);
    return r;
}

//Matrix Operations
const int MaxMatrixSize = 40; //NOTES:MaxMatrixSize

template<class T> inline void showMatrix(int n, T A[MaxMatrixSize][MaxMatrixSize])//NOTES:showMatrix(
{
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++)cout << A[i][j];
        cout << endl;
    }
}

template<class T> inline T checkMod(T n, T m) {
    return (n % m + m) % m;
}//NOTES:checkMod(

template<class T> inline void identityMatrix(int n, T A[MaxMatrixSize][MaxMatrixSize])//NOTES:identityMatrix(
{
    for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) A[i][j] = (i == j) ? 1 : 0;
}

template<class T> inline void addMatrix(int n, T C[MaxMatrixSize][MaxMatrixSize], T A[MaxMatrixSize][MaxMatrixSize], T B[MaxMatrixSize][MaxMatrixSize])//NOTES:addMatrix(
{
    for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) C[i][j] = A[i][j] + B[i][j];
}

template<class T> inline void subMatrix(int n, T C[MaxMatrixSize][MaxMatrixSize], T A[MaxMatrixSize][MaxMatrixSize], T B[MaxMatrixSize][MaxMatrixSize])//NOTES:subMatrix(
{
    for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) C[i][j] = A[i][j] - B[i][j];
}

template<class T> inline void mulMatrix(int n, T C[MaxMatrixSize][MaxMatrixSize], T _A[MaxMatrixSize][MaxMatrixSize], T _B[MaxMatrixSize][MaxMatrixSize])//NOTES:mulMatrix(
{
    T A[MaxMatrixSize][MaxMatrixSize], B[MaxMatrixSize][MaxMatrixSize];
    for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) A[i][j] = _A[i][j], B[i][j] = _B[i][j], C[i][j] = 0;
    for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) for (int k = 0; k < n; k++) C[i][j] += A[i][k] * B[k][j];
}

template<class T> inline void addModMatrix(int n, T m, T C[MaxMatrixSize][MaxMatrixSize], T A[MaxMatrixSize][MaxMatrixSize], T B[MaxMatrixSize][MaxMatrixSize])//NOTES:addModMatrix(
{
    for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) C[i][j] = checkMod(A[i][j] + B[i][j], m);
}

template<class T> inline void subModMatrix(int n, T m, T C[MaxMatrixSize][MaxMatrixSize], T A[MaxMatrixSize][MaxMatrixSize], T B[MaxMatrixSize][MaxMatrixSize])//NOTES:subModMatrix(
{
    for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) C[i][j] = checkMod(A[i][j] - B[i][j], m);
}

template<class T> inline T multiplyMod(T a, T b, T m) {
    return (T) ((((int64) (a)*(int64) (b) % (int64) (m))+(int64) (m)) % (int64) (m));
}//NOTES:multiplyMod(

template<class T> inline void mulModMatrix(int n, T m, T C[MaxMatrixSize][MaxMatrixSize], T _A[MaxMatrixSize][MaxMatrixSize], T _B[MaxMatrixSize][MaxMatrixSize])//NOTES:mulModMatrix(
{
    T A[MaxMatrixSize][MaxMatrixSize], B[MaxMatrixSize][MaxMatrixSize];
    for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) A[i][j] = _A[i][j], B[i][j] = _B[i][j], C[i][j] = 0;
    for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) for (int k = 0; k < n; k++) C[i][j] = (C[i][j] + multiplyMod(A[i][k], B[k][j], m)) % m;
}

template<class T> inline T powerMod(T p, int e, T m)//NOTES:powerMod(
{
    if (e == 0)return 1 % m;
    else if (e % 2 == 0) {
        T t = powerMod(p, e / 2, m);
        return multiplyMod(t, t, m);
    } else return multiplyMod(powerMod(p, e - 1, m), p, m);
}
//Point&Line

double dist(double x1, double y1, double x2, double y2) {
    return sqrt(sqr(x1 - x2) + sqr(y1 - y2));
}//NOTES:dist(

double distR(double x1, double y1, double x2, double y2) {
    return sqr(x1 - x2) + sqr(y1 - y2);
}//NOTES:distR(

template<class T> T cross(T x0, T y0, T x1, T y1, T x2, T y2) {
    return (x1 - x0)*(y2 - y0)-(x2 - x0)*(y1 - y0);
}//NOTES:cross(

int crossOper(double x0, double y0, double x1, double y1, double x2, double y2)//NOTES:crossOper(
{
    double t = (x1 - x0)*(y2 - y0)-(x2 - x0)*(y1 - y0);
    if (fabs(t) <= eps) return 0;
    return (t < 0) ? -1 : 1;
}

bool isIntersect(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4)//NOTES:isIntersect(
{
    return crossOper(x1, y1, x2, y2, x3, y3) * crossOper(x1, y1, x2, y2, x4, y4) < 0 && crossOper(x3, y3, x4, y4, x1, y1) * crossOper(x3, y3, x4, y4, x2, y2) < 0;
}

bool isMiddle(double s, double m, double t) {
    return fabs(s - m) <= eps | fabs(t - m) <= eps | (s < m) != (t < m);
}//NOTES:isMiddle(
//Translator

bool isUpperCase(char c) {
    return c >= 'A' && c <= 'Z';
}//NOTES:isUpperCase(

bool isLowerCase(char c) {
    return c >= 'a' && c <= 'z';
}//NOTES:isLowerCase(

bool isLetter(char c) {
    return c >= 'A' && c <= 'Z' | c >= 'a' && c <= 'z';
}//NOTES:isLetter(

bool isDigit(char c) {
    return c >= '0' && c <= '9';
}//NOTES:isDigit(

char toLowerCase(char c) {
    return (isUpperCase(c)) ? (c + 32) : c;
}//NOTES:toLowerCase(

char toUpperCase(char c) {
    return (isLowerCase(c)) ? (c - 32) : c;
}//NOTES:toUpperCase(

template<class T> string toString(T n) {
    ostringstream ost;
    ost << n;
    ost.flush();
    return ost.str();
}//NOTES:toString(

int toInt(string s) {
    int r = 0;
    istringstream sin(s);
    sin >> r;
    return r;
}//NOTES:toInt(

int64 toInt64(string s) {
    int64 r = 0;
    istringstream sin(s);
    sin >> r;
    return r;
}//NOTES:toInt64(

double toDouble(string s) {
    double r = 0;
    istringstream sin(s);
    sin >> r;
    return r;
}//NOTES:toDouble(

template<class T> void stoa(string s, int &n, T A[]) {
    n = 0;
    istringstream sin(s);
    for (T v; sin >> v; A[n++] = v);
}//NOTES:stoa(

template<class T> void atos(int n, T A[], string &s) {
    ostringstream sout;
    for (int i = 0; i < n; i++) {
        if (i > 0)sout << ' ';
        sout << A[i];
    }
    s = sout.str();
}//NOTES:atos(

template<class T> void atov(int n, T A[], vector<T> &vi) {
    vi.clear();
    for (int i = 0; i < n; i++) vi.push_back(A[i]);
}//NOTES:atov(

template<class T> void vtoa(vector<T> vi, int &n, T A[]) {
    n = vi.size();
    for (int i = 0; i < n; i++)A[i] = vi[i];
}//NOTES:vtoa(

template<class T> void stov(string s, vector<T> &vi) {
    vi.clear();
    istringstream sin(s);
    for (T v; sin >> v; vi.push_back(v));
}//NOTES:stov(

template<class T> void vtos(vector<T> vi, string &s) {
    ostringstream sout;
    for (int i = 0; i < vi.size(); i++) {
        if (i > 0)sout << ' ';
        sout << vi[i];
    }
    s = sout.str();
}//NOTES:vtos(
//Fraction

template<class T> struct Fraction {
    T a, b;
    Fraction(T a = 0, T b = 1);
    string toString();
}; //NOTES:Fraction

template<class T> Fraction<T>::Fraction(T a, T b) {
    T d = gcd(a, b);
    a /= d;
    b /= d;
    if (b < 0) a = -a, b = -b;
    this->a = a;
    this->b = b;
}

template<class T> string Fraction<T>::toString() {
    ostringstream sout;
    sout << a << "/" << b;
    return sout.str();
}

template<class T> Fraction<T> operator+(Fraction<T> p, Fraction<T> q) {
    return Fraction<T > (p.a * q.b + q.a * p.b, p.b * q.b);
}

template<class T> Fraction<T> operator-(Fraction<T> p, Fraction<T> q) {
    return Fraction<T > (p.a * q.b - q.a * p.b, p.b * q.b);
}

template<class T> Fraction<T> operator*(Fraction<T> p, Fraction<T> q) {
    return Fraction<T > (p.a * q.a, p.b * q.b);
}

template<class T> Fraction<T> operator/(Fraction<T> p, Fraction<T> q) {
    return Fraction<T > (p.a * q.b, p.b * q.a);
}
//Template code by ACRush

bool isSpell(string s){
    vs tam;
    stov(s, tam);
    if (!tam.empty() && tam[0].find("#") == 0) return true;
    return false;
}

int main(){
    //freopen ("INP.txt", "r", stdin);
    //freopen ("OUT.txt", "w", stdout);
    string s;
    vs luu;
    while (getline(cin, s)) luu.PB(s);
    vs spell, other;
    int i = 0;
    while (i < luu.size()){
        if (i < luu.size() && isSpell(luu[i])){
            cout << luu[i];
            i++;
            if (i < luu.size()) cout << endl;
        }
        else{
            string s = "";
            while (i < luu.size() && !isSpell(luu[i])){
                vs tam;
                stov(luu[i], tam);
                FORN (j, 0, tam.size()) s = s + tam[j];
                i++;
            }
            cout << s;
            if (i < luu.size()) cout << endl;
        }
    }
}


#include <set>
#include <bitset>
#include <queue>
#include <deque>
#include <stack>
#include <sstream>
#include <iostream>
#include <iomanip>

#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <ctime>
#include <cstring>
#include <string>
#include <cassert>

#include <vector>
#include <list>
#include <map>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>

using namespace std;

typedef vector<int> vi;
typedef vector<vi> vvi;
typedef pair<int, int> ii;
typedef long long int64; //NOTES:int64
typedef unsigned long long uint64; //NOTES:uint64
const double pi = acos(-1.0); //NOTES:pi
const double eps = 1e-11; //NOTES:eps
const int MAXI = 2 << 29;

#define FORN(i,a,b)     for (int i=(a),_b=(b); i<_b; i++)
#define RFORN(i,b,a)    for (int i=(b)-1,_a=(a); i>=_a; i--)
#define RESET(a,b)      memset((a),(b),sizeof(a))

#define SC(x)           scanf("%d",&x)
#define SC2(x,y)        scanf("%d%d",&x,&y)
#define PR(x)           printf("%d ",x)
#define PR2(x,y)        printf("%d %d ",x,y)
#define PRS(x)          printf("%s",x)
#define END             printf("\n")
#define EXIT(x)         {PRS(x);return 0;}
#define DBG(x)          {cerr << "--> " << #x << " = " << x << endl;}

#define fi              first
#define se              second
#define PB              push_back
#define ALL(x)          (x).begin(),(x).end()
#define MP(X,Y)         make_pair(X,Y)//NOTES:MP(
#define TR(c, i)        for(typeof((c).begin()) i = (c).begin(); i != (c).end(); i++)
#define present(c, x)   ((c).find(x) != (c).end())

int compare (const void *a, const void *b){
    return (*(int*)a-*(int*)b);
}

void startDBG(){
    PRS("------------------- Start Debug -------------------\n\n");
}

void endDBG(){
    PRS("\n\n------------------- End Debug -------------------\n");
}

template<class T> inline void DebM(T A[], T ii, T jj){//Debug sequence
    END;PRS("----------------DEBUG----------------");END;
    FORN (i,ii,jj) cout<<A[i]<<" ";
    END;PRS("-------------------------------------");END;
}
//Template code by ACRush
template<class T> inline bool isPrimeNumber(T n)//NOTES:isPrimeNumber(
{
    if (n <= 1)return false;
    for (T i = 2; i * i <= n; i++) if (n % i == 0) return false;
    return true;
}

template<class T> inline void checkmin(T &a, T b) {
    if (b < a) a = b;
}//NOTES:checkmin(

template<class T> inline void checkmax(T &a, T b) {
    if (b > a) a = b;
}//NOTES:checkmax(

template<class T> inline T sqr(T x) {
    return x*x;
}//NOTES:sqr

template<class T> inline T lowbit(T n) {
    return (n^(n - 1))&n;
}//NOTES:lowbit(

template<class T> inline int countbit(T n) {
    return (n == 0) ? 0 : (1 + countbit(n & (n - 1)));
}//NOTES:countbit(
//Numberic Functions

int64 C(int64 m, int64 n){
    int64 tot = 1;
    int64 i = m;
    while (i > m - n)
        tot *= i--;
    i = n;
    while (i > 1) tot /= i--;
    return tot;
}

template<class T> inline T gcd(T a, T b)//NOTES:gcd(
{
    if (a < 0)return gcd(-a, b);
    if (b < 0)return gcd(a, -b);
    return (b == 0) ? a : gcd(b, a % b);
}

template<class T> inline T lcm(T a, T b)//NOTES:lcm(
{
    if (a < 0)return lcm(-a, b);
    if (b < 0)return lcm(a, -b);
    return a * (b / gcd(a, b));
}

template<class T> inline T euclide(T a, T b, T &x, T &y)//NOTES:euclide(
{
    if (a < 0) {
        T d = euclide(-a, b, x, y);
        x = -x;
        return d;
    }
    if (b < 0) {
        T d = euclide(a, -b, x, y);
        y = -y;
        return d;
    }
    if (b == 0) {
        x = 1;
        y = 0;
        return a;
    } else {
        T d = euclide(b, a % b, x, y);
        T t = x;
        x = y;
        y = t - (a / b) * y;
        return d;
    }
}

template<class T> inline vector<pair<T, int> > factorize(T n)//NOTES:factorize(
{
    vector<pair<T, int> > R;
    for (T i = 2; n > 1;) {
        if (n % i == 0) {
            int C = 0;
            for (; n % i == 0; C++, n /= i);
            R.push_back(make_pair(i, C));
        }
        i++;
        if (i > n / i) i = n;
    }
    if (n > 1) R.push_back(make_pair(n, 1));
    return R;
}

template<class T> inline T eularFunction(T n)//NOTES:eularFunction(
{
    vector<pair<T, int> > R = factorize(n);
    T r = n;
    for (int i = 0; i < R.size(); i++)r = r / R[i].first * (R[i].first - 1);
    return r;
}

//Matrix Operations
const int MaxMatrixSize = 40; //NOTES:MaxMatrixSize

template<class T> inline void showMatrix(int n, T A[MaxMatrixSize][MaxMatrixSize])//NOTES:showMatrix(
{
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++)cout << A[i][j];
        cout << endl;
    }
}

template<class T> inline T checkMod(T n, T m) {
    return (n % m + m) % m;
}//NOTES:checkMod(

template<class T> inline void identityMatrix(int n, T A[MaxMatrixSize][MaxMatrixSize])//NOTES:identityMatrix(
{
    for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) A[i][j] = (i == j) ? 1 : 0;
}

template<class T> inline void addMatrix(int n, T C[MaxMatrixSize][MaxMatrixSize], T A[MaxMatrixSize][MaxMatrixSize], T B[MaxMatrixSize][MaxMatrixSize])//NOTES:addMatrix(
{
    for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) C[i][j] = A[i][j] + B[i][j];
}

template<class T> inline void subMatrix(int n, T C[MaxMatrixSize][MaxMatrixSize], T A[MaxMatrixSize][MaxMatrixSize], T B[MaxMatrixSize][MaxMatrixSize])//NOTES:subMatrix(
{
    for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) C[i][j] = A[i][j] - B[i][j];
}

template<class T> inline void mulMatrix(int n, T C[MaxMatrixSize][MaxMatrixSize], T _A[MaxMatrixSize][MaxMatrixSize], T _B[MaxMatrixSize][MaxMatrixSize])//NOTES:mulMatrix(
{
    T A[MaxMatrixSize][MaxMatrixSize], B[MaxMatrixSize][MaxMatrixSize];
    for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) A[i][j] = _A[i][j], B[i][j] = _B[i][j], C[i][j] = 0;
    for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) for (int k = 0; k < n; k++) C[i][j] += A[i][k] * B[k][j];
}

template<class T> inline void addModMatrix(int n, T m, T C[MaxMatrixSize][MaxMatrixSize], T A[MaxMatrixSize][MaxMatrixSize], T B[MaxMatrixSize][MaxMatrixSize])//NOTES:addModMatrix(
{
    for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) C[i][j] = checkMod(A[i][j] + B[i][j], m);
}

template<class T> inline void subModMatrix(int n, T m, T C[MaxMatrixSize][MaxMatrixSize], T A[MaxMatrixSize][MaxMatrixSize], T B[MaxMatrixSize][MaxMatrixSize])//NOTES:subModMatrix(
{
    for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) C[i][j] = checkMod(A[i][j] - B[i][j], m);
}

template<class T> inline T multiplyMod(T a, T b, T m) {
    return (T) ((((int64) (a)*(int64) (b) % (int64) (m))+(int64) (m)) % (int64) (m));
}//NOTES:multiplyMod(

template<class T> inline void mulModMatrix(int n, T m, T C[MaxMatrixSize][MaxMatrixSize], T _A[MaxMatrixSize][MaxMatrixSize], T _B[MaxMatrixSize][MaxMatrixSize])//NOTES:mulModMatrix(
{
    T A[MaxMatrixSize][MaxMatrixSize], B[MaxMatrixSize][MaxMatrixSize];
    for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) A[i][j] = _A[i][j], B[i][j] = _B[i][j], C[i][j] = 0;
    for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) for (int k = 0; k < n; k++) C[i][j] = (C[i][j] + multiplyMod(A[i][k], B[k][j], m)) % m;
}

template<class T> inline T powerMod(T p, int e, T m)//NOTES:powerMod(
{
    if (e == 0)return 1 % m;
    else if (e % 2 == 0) {
        T t = powerMod(p, e / 2, m);
        return multiplyMod(t, t, m);
    } else return multiplyMod(powerMod(p, e - 1, m), p, m);
}
//Point&Line

double dist(double x1, double y1, double x2, double y2) {
    return sqrt(sqr(x1 - x2) + sqr(y1 - y2));
}//NOTES:dist(

double distR(double x1, double y1, double x2, double y2) {
    return sqr(x1 - x2) + sqr(y1 - y2);
}//NOTES:distR(

template<class T> T cross(T x0, T y0, T x1, T y1, T x2, T y2) {
    return (x1 - x0)*(y2 - y0)-(x2 - x0)*(y1 - y0);
}//NOTES:cross(

int crossOper(double x0, double y0, double x1, double y1, double x2, double y2)//NOTES:crossOper(
{
    double t = (x1 - x0)*(y2 - y0)-(x2 - x0)*(y1 - y0);
    if (fabs(t) <= eps) return 0;
    return (t < 0) ? -1 : 1;
}

bool isIntersect(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4)//NOTES:isIntersect(
{
    return crossOper(x1, y1, x2, y2, x3, y3) * crossOper(x1, y1, x2, y2, x4, y4) < 0 && crossOper(x3, y3, x4, y4, x1, y1) * crossOper(x3, y3, x4, y4, x2, y2) < 0;
}

bool isMiddle(double s, double m, double t) {
    return fabs(s - m) <= eps | fabs(t - m) <= eps | (s < m) != (t < m);
}//NOTES:isMiddle(
//Translator

bool isUpperCase(char c) {
    return c >= 'A' && c <= 'Z';
}//NOTES:isUpperCase(

bool isLowerCase(char c) {
    return c >= 'a' && c <= 'z';
}//NOTES:isLowerCase(

bool isLetter(char c) {
    return c >= 'A' && c <= 'Z' | c >= 'a' && c <= 'z';
}//NOTES:isLetter(

bool isDigit(char c) {
    return c >= '0' && c <= '9';
}//NOTES:isDigit(

char toLowerCase(char c) {
    return (isUpperCase(c)) ? (c + 32) : c;
}//NOTES:toLowerCase(

char toUpperCase(char c) {
    return (isLowerCase(c)) ? (c - 32) : c;
}//NOTES:toUpperCase(

template<class T> string toString(T n) {
    ostringstream ost;
    ost << n;
    ost.flush();
    return ost.str();
}//NOTES:toString(

int toInt(string s) {
    int r = 0;
    istringstream sin(s);
    sin >> r;
    return r;
}//NOTES:toInt(

int64 toInt64(string s) {
    int64 r = 0;
    istringstream sin(s);
    sin >> r;
    return r;
}//NOTES:toInt64(

double toDouble(string s) {
    double r = 0;
    istringstream sin(s);
    sin >> r;
    return r;
}//NOTES:toDouble(

template<class T> void stoa(string s, int &n, T A[]) {
    n = 0;
    istringstream sin(s);
    for (T v; sin >> v; A[n++] = v);
}//NOTES:stoa(

template<class T> void atos(int n, T A[], string &s) {
    ostringstream sout;
    for (int i = 0; i < n; i++) {
        if (i > 0)sout << ' ';
        sout << A[i];
    }
    s = sout.str();
}//NOTES:atos(

template<class T> void atov(int n, T A[], vector<T> &vi) {
    vi.clear();
    for (int i = 0; i < n; i++) vi.push_back(A[i]);
}//NOTES:atov(

template<class T> void vtoa(vector<T> vi, int &n, T A[]) {
    n = vi.size();
    for (int i = 0; i < n; i++)A[i] = vi[i];
}//NOTES:vtoa(

template<class T> void stov(string s, vector<T> &vi) {
    vi.clear();
    istringstream sin(s);
    for (T v; sin >> v; vi.push_back(v));
}//NOTES:stov(

template<class T> void vtos(vector<T> vi, string &s) {
    ostringstream sout;
    for (int i = 0; i < vi.size(); i++) {
        if (i > 0)sout << ' ';
        sout << vi[i];
    }
    s = sout.str();
}//NOTES:vtos(
//Fraction

template<class T> struct Fraction {
    T a, b;
    Fraction(T a = 0, T b = 1);
    string toString();
}; //NOTES:Fraction

template<class T> Fraction<T>::Fraction(T a, T b) {
    T d = gcd(a, b);
    a /= d;
    b /= d;
    if (b < 0) a = -a, b = -b;
    this->a = a;
    this->b = b;
}

template<class T> string Fraction<T>::toString() {
    ostringstream sout;
    sout << a << "/" << b;
    return sout.str();
}

template<class T> Fraction<T> operator+(Fraction<T> p, Fraction<T> q) {
    return Fraction<T > (p.a * q.b + q.a * p.b, p.b * q.b);
}

template<class T> Fraction<T> operator-(Fraction<T> p, Fraction<T> q) {
    return Fraction<T > (p.a * q.b - q.a * p.b, p.b * q.b);
}

template<class T> Fraction<T> operator*(Fraction<T> p, Fraction<T> q) {
    return Fraction<T > (p.a * q.a, p.b * q.b);
}

template<class T> Fraction<T> operator/(Fraction<T> p, Fraction<T> q) {
    return Fraction<T > (p.a * q.b, p.b * q.a);
}
//Template code by ACRush

bool isAmpliLine(string s){
    vector<string> tam;
    stov(s, tam);
    if (tam.size() > 0 && tam[0][0] == '#') return true;
    return false;
}

int main(){
    //freopen ("INP.txt", "r", stdin);
    vector<string> ampliLine;
    vector<string> otherLine;
    string s;
    string tam = "";
    while (getline(cin, s)){
        if (isAmpliLine(s)) {
            otherLine.PB(tam);
            ampliLine.PB(s);
            tam = "";
        }
        else{
            vector<string> luu;
            stov(s, luu);
            FORN (i, 0, luu.size()) tam = tam + luu[i];
        }
    }
    if (!isAmpliLine(s)) otherLine.PB(tam);
    if (!otherLine[0].empty()) cout << otherLine[0] << endl;
    FORN (i, 0, ampliLine.size()){
        cout << ampliLine[i] << endl;
        if (i + 1 < otherLine.size()){
            cout << otherLine[i + 1] << endl;
        }
    }
}