#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;
}