#include <iostream>
#include <conio.h>
#include <windows.h>
#include <vector>
#include <iostream>
#include <utility>
#include <algorithm>
//#include <itorator.h>
using namespace std;
typedef vector<char>::iterator strtab_itorator;
bool stringcmp(strtab_itorator astart,strtab_itorator aend,strtab_itorator bstart,strtab_itorator bend)
{
while((astart!=aend)||(bstart!=bend)){
if(*astart>*bstart)return true;
if(*astart<*bstart)return false;
astart++;
bstart++;
}
if(astart==aend&&bstart!=bend)return false;
if(bstart==bend&&astart!=aend)return true;
return false;
}
struct strtab_cmp
{
typedef vector<char>::iterator strtab_itorator;
bool operator()(const pair<strtab_itorator,strtab_itorator>&x,
const pair<strtab_itorator,strtab_itorator>&y)const{
return stringcmp(x.first,x.second,y.first,y.second);
}
};
struct strtab_print
{
ostream& out;
strtab_print(ostream &os):out(os){}
typedef vector<char>::iterator strtab_itorator;
void operator()(const pair<strtab_itorator,strtab_itorator>&s)const{
copy(s.first,s.second,ostream_iterator<char>(out));
}
};
int main()
{
vector<char>strtab;
char c;
while(cin.get(c)){
if(c=='s')break;
strtab.push_back(c);
}
typedef vector<char>::iterator strtab_itorator;
vector< pair < strtab_itorator, strtab_itorator > > lines;
strtab_itorator start=strtab.begin();
while(start!=strtab.end()){
strtab_itorator next=find(start,strtab.end(),'\n');
if(next!=strtab.end())++next;
lines.push_back(make_pair(start,next));
start=next;
}
printf("------------\n");
sort(lines.begin(),lines.end(),strtab_cmp());
for_each(lines.begin(),lines.end(),strtab_print(cout));
return 0;
}