/*
 *	Eray Molla, 
 *	E-Bergi Ocak2009 Programlama Sorusu Yaniti
 */


#include<fstream>

using namespace std;


#define MAX_SATIR_SAYISI 50
#define SUTUN_SAYISI 20


char alan[MAX_SATIR_SAYISI + 1][SUTUN_SAYISI];
int satirSayisi;
int sutunSayisi = SUTUN_SAYISI;
char siralama[30];
unsigned int seviyeler[int('Z') + 1];
int maxSeviye;


void girdiyiOku()
{
	char temp;
	ifstream in("tetris.gir");
	in >> satirSayisi;
	for(int y = 0; y < satirSayisi; y++)
		for(int x = 0; x < sutunSayisi; x++)
		{
			in >> temp;
			alan[y][x] = temp;
		}
	in.close();
}

void ciktiyiYaz()
{
	ofstream out("tetris.cik");
	for(int seviye = 1; seviye <= maxSeviye; seviye++)
	{
		for(int i = 'A'; i <= 'Z'; i++)
		{
			if(seviyeler[i] == seviye)
				out << char(i);
		}
	}
	out.close();
}



 /*	
  *	Her bir blogun altindaki bloga bakarak dusme sirasini ustunde bulundugu bloga gore veriyoruz.
  */

void coz()
{
	char blokKodu, alttakiBlokKodu;
	int seviye = 0;
	for(int y = satirSayisi - 1; y >= 0; y--)
	{
		for(int x = 0; x < sutunSayisi; x++)
		{
			blokKodu = alan[y][x];
			alttakiBlokKodu = alan[y + 1][x];
			if(alttakiBlokKodu != '.' && alttakiBlokKodu != blokKodu)
			{
				seviye = seviyeler[alttakiBlokKodu] + 1;
				if(seviyeler[blokKodu] < seviye)
					seviyeler[blokKodu] = seviye;
				if(maxSeviye < seviye)
					maxSeviye = seviye;
			}
		}
	}
}

int main()
{
	girdiyiOku();
	coz();
	ciktiyiYaz();
	return 0;
}
