struct tree
{
whatever payload;
std::list<tree*> vertices;
void * optional_whatever;
}
operator<<(stream& out, tree& benis)
{
out<<benis.payload;
bool nothing= benis.optional_whatever==NULL ;
out<<nothing;
if(!nothing)
out<<*benis.optional_whatever;
size_t num=benis.vertices.size();
out<<num;
for(size_t i=0; i!=num; i++)
out<<*benis.vertices[i];
}