#include <iostream>
using namespace std;
struct Node
{
string data;
Node* next;
};
Node* add2back(string s, Node* list);
void print(Node* list);
int length(Node* list);
string max(Node* list);
void deletelist(Node* list);
int main()
{
string s;
Node* L = NULL;
while( cin >> s && s != ";")
L = add2back(s, L);
print(L);
cout << "length=" << length(L) << endl;
cout << "max=" << max(L) << endl;
deletelist(L);
return 0;
}
Node* add2back(string s, Node* list)
{
if( list == NULL )
{
list = new Node{s, NULL};
}
else
{
Node* sublist = list->next;
Node* upd_sublist = add2back(s, sublist);
list->next = upd_sublist;
}
return list;
}
void print(Node* list)
{
if ( list == NULL )
{
cout << endl;
return;
}
else
{
cout << list->data << " ";
print(list->next);
}
}
string max(Node* list)
{
if ( list == NULL )
{
return "";
}
else
{
Node* sublist = list->next;
if( list->data >= max(sublist) )
return list->data;
else
return max(sublist);
}
}
int length(Node* list)
{
if( list == NULL )
return 0;
Node* sublist = list->next;
return 1 + length(sublist);
}
void deletelist(Node* list)
{
if( list == NULL )
return;
Node* sublist = list->next;
deletelist(sublist);
delete list;
}