#include <iostream>
#include <stdlib.h>
#include <windows.h>
#include <stdio.h>
using namespace std;
class leaf // один узел
{
public:
int info;
struct leaf *vniz, *right;
leaf(int x) // конструктор вместо функции создания узла нового дерева
{
info = x ;
vniz = right = NULL;
cout<<"zapisal-"<<x<<endl;
}
//методы дерева
/* *leaf new_leaf (int x) // создание нового узла дерева
{
TREE temp(x);
temp = (TREE) malloc (sizeof(struct leaf));
temp->left = temp->right = NULL;
return temp;
}
*/
/* leaf* add_leaf(int x, leaf *pn) //функция добавления узла в дерево
{
if (pn == NULL)
return (new leaf(x));
if (x < pn->info)
pn->left = add_leaf (x, pn->vniz);
else
pn->right = add_leaf (x, pn->right);
return pn;
}
*/
};
leaf* f(int x, leaf *yzel)
{
int n=x%10;
/* if(!yzel)
{
yzel= new leaf(x%10);
if(x>9)
f(x,yzel);
else
f(666,yzel);
}
*/
if(n==yzel->info || ( (yzel->info==x) && (x==666) ) )
{
if(x>9 && x!=666) //если это не последняя цифра числа
{
if(yzel->vniz)
f(x/10,yzel->vniz);
else
{
yzel->vniz=new leaf((x/10)%10);
if(x>100)
f(x/100,yzel->vniz);
}
}
else // если это единственная цифра
{
if(yzel->vniz)
f(666,yzel->vniz);
else
yzel->vniz=new leaf(666); // создаем указатель-узел на конечность набора
}
}
else
{
if(yzel->right)
f(x,yzel->right);
else
{
if(x!=666)
yzel->right=new leaf(x%10);
else
yzel->right=new leaf(x);
if(x>9)
f(x/10,yzel->right);
else
yzel->right->vniz=new leaf(666);
}
}
return yzel;
};
int main()
{
int n;
leaf tree(1);
for(int i=0; i<5; i++)
{
cin>>n;
f(n,&tree);
}
return 0;
}