namespace boost {
  namespace intrusive {
    template<typename T, class... Options> class avl_set;
    template<typename T, class... Options> struct make_avl_set;
    template<typename T, class... Options> class avl_multiset;
    template<typename T, class... Options> struct make_avl_multiset;
    template<typename T, class... Options> 
      bool operator!=(const avl_set< T, Options...> & x, 
                      const avl_set< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator>(const avl_set< T, Options...> & x, 
                     const avl_set< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator<=(const avl_set< T, Options...> & x, 
                      const avl_set< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator>=(const avl_set< T, Options...> & x, 
                      const avl_set< T, Options...> & y);
    template<typename T, class... Options> 
      void swap(avl_set< T, Options...> & x, avl_set< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator!=(const avl_multiset< T, Options...> & x, 
                      const avl_multiset< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator>(const avl_multiset< T, Options...> & x, 
                     const avl_multiset< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator<=(const avl_multiset< T, Options...> & x, 
                      const avl_multiset< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator>=(const avl_multiset< T, Options...> & x, 
                      const avl_multiset< T, Options...> & y);
    template<typename T, class... Options> 
      void swap(avl_multiset< T, Options...> & x, 
                avl_multiset< T, Options...> & y);
  }
}
 
namespace boost {
  namespace intrusive {
    template<typename T, class... Options> class avltree;
    template<typename T, class... Options> struct make_avltree;
    template<typename T, class... Options> 
      bool operator<(const avltree< T, Options...> & x, 
                     const avltree< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator==(const avltree< T, Options...> & x, 
                      const avltree< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator!=(const avltree< T, Options...> & x, 
                      const avltree< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator>(const avltree< T, Options...> & x, 
                     const avltree< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator<=(const avltree< T, Options...> & x, 
                      const avltree< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator>=(const avltree< T, Options...> & x, 
                      const avltree< T, Options...> & y);
    template<typename T, class... Options> 
      void swap(avltree< T, Options...> & x, avltree< T, Options...> & y);
  }
}
 
namespace boost {
  namespace intrusive {
    template<typename NodeTraits> class avltree_algorithms;
  }
}
 
namespace boost {
  namespace intrusive {
    template<typename T, typename NodeTraits, 
             link_mode_type LinkMode = safe_link> 
      struct derivation_value_traits;
  }
}
 
namespace boost {
  namespace intrusive {
    template<typename T, class... Options> class hashtable;
    template<typename T, class... Options> struct make_hashtable;
  }
}
 
namespace boost {
  namespace intrusive {
    template<typename T, class... Options> class list;
    template<typename T, class... Options> struct make_list;
    template<typename T, class... Options> 
      bool operator<(const list< T, Options...> & x, 
                     const list< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator==(const list< T, Options...> & x, 
                      const list< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator!=(const list< T, Options...> & x, 
                      const list< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator>(const list< T, Options...> & x, 
                     const list< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator<=(const list< T, Options...> & x, 
                      const list< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator>=(const list< T, Options...> & x, 
                      const list< T, Options...> & y);
    template<typename T, class... Options> 
      void swap(list< T, Options...> & x, list< T, Options...> & y);
  }
}
 
namespace boost {
  namespace intrusive {
    template<typename T, typename NodeTraits, 
             typename NodeTraits::node T::* PtrToMember, 
             link_mode_type LinkMode = safe_link> 
      struct member_value_traits;
  }
}
 
namespace boost {
  namespace intrusive {
    template<typename Parent, typename Member> 
      Parent * get_parent_from_member(Member *, const Member Parent::*);
    template<typename Parent, typename Member> 
      const Parent * 
      get_parent_from_member(const Member *, const Member Parent::*);
  }
}
 
namespace boost {
  namespace intrusive {
    template<typename T> struct priority_compare;
  }
}
 
namespace boost {
  namespace intrusive {
    template<typename T, class... Options> class rbtree;
    template<typename T, class... Options> struct make_rbtree;
    template<typename T, class... Options> 
      bool operator<(const rbtree< T, Options...> & x, 
                     const rbtree< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator==(const rbtree< T, Options...> & x, 
                      const rbtree< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator!=(const rbtree< T, Options...> & x, 
                      const rbtree< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator>(const rbtree< T, Options...> & x, 
                     const rbtree< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator<=(const rbtree< T, Options...> & x, 
                      const rbtree< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator>=(const rbtree< T, Options...> & x, 
                      const rbtree< T, Options...> & y);
    template<typename T, class... Options> 
      void swap(rbtree< T, Options...> & x, rbtree< T, Options...> & y);
  }
}
 
namespace boost {
  namespace intrusive {
    template<typename NodeTraits> class rbtree_algorithms;
  }
}
 
namespace boost {
  namespace intrusive {
    template<typename T, class... Options> class set;
    template<typename T, class... Options> struct make_set;
    template<typename T, class... Options> class multiset;
    template<typename T, class... Options> struct make_multiset;
    template<typename T, class... Options> 
      bool operator!=(const set< T, Options...> & x, 
                      const set< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator>(const set< T, Options...> & x, 
                     const set< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator<=(const set< T, Options...> & x, 
                      const set< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator>=(const set< T, Options...> & x, 
                      const set< T, Options...> & y);
    template<typename T, class... Options> 
      void swap(set< T, Options...> & x, set< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator!=(const multiset< T, Options...> & x, 
                      const multiset< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator>(const multiset< T, Options...> & x, 
                     const multiset< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator<=(const multiset< T, Options...> & x, 
                      const multiset< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator>=(const multiset< T, Options...> & x, 
                      const multiset< T, Options...> & y);
    template<typename T, class... Options> 
      void swap(multiset< T, Options...> & x, multiset< T, Options...> & y);
  }
}
 
namespace boost {
  namespace intrusive {
    template<typename T, class... Options> class sg_set;
    template<typename T, class... Options> struct make_sg_set;
    template<typename T, class... Options> class sg_multiset;
    template<typename T, class... Options> struct make_sg_multiset;
    template<typename T, class... Options> 
      bool operator!=(const sg_set< T, Options...> & x, 
                      const sg_set< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator>(const sg_set< T, Options...> & x, 
                     const sg_set< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator<=(const sg_set< T, Options...> & x, 
                      const sg_set< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator>=(const sg_set< T, Options...> & x, 
                      const sg_set< T, Options...> & y);
    template<typename T, class... Options> 
      void swap(sg_set< T, Options...> & x, sg_set< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator!=(const sg_multiset< T, Options...> & x, 
                      const sg_multiset< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator>(const sg_multiset< T, Options...> & x, 
                     const sg_multiset< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator<=(const sg_multiset< T, Options...> & x, 
                      const sg_multiset< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator>=(const sg_multiset< T, Options...> & x, 
                      const sg_multiset< T, Options...> & y);
    template<typename T, class... Options> 
      void swap(sg_multiset< T, Options...> & x, 
                sg_multiset< T, Options...> & y);
  }
}
 
namespace boost {
  namespace intrusive {
    template<typename T, class... Options> class sgtree;
    template<typename T, class... Options> struct make_sgtree;
    template<typename T, class... Options> 
      bool operator<(const sgtree< T, Options...> & x, 
                     const sgtree< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator==(const sgtree< T, Options...> & x, 
                      const sgtree< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator!=(const sgtree< T, Options...> & x, 
                      const sgtree< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator>(const sgtree< T, Options...> & x, 
                     const sgtree< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator<=(const sgtree< T, Options...> & x, 
                      const sgtree< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator>=(const sgtree< T, Options...> & x, 
                      const sgtree< T, Options...> & y);
    template<typename T, class... Options> 
      void swap(sgtree< T, Options...> & x, sgtree< T, Options...> & y);
  }
}
 
namespace boost {
  namespace intrusive {
    template<typename NodeTraits> class sgtree_algorithms;
  }
}
 
namespace boost {
  namespace intrusive {
    template<typename T, class... Options> class slist;
    template<typename T, class... Options> struct make_slist;
    template<typename T, class... Options> 
      bool operator<(const slist< T, Options...> & x, 
                     const slist< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator==(const slist< T, Options...> & x, 
                      const slist< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator!=(const slist< T, Options...> & x, 
                      const slist< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator>(const slist< T, Options...> & x, 
                     const slist< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator<=(const slist< T, Options...> & x, 
                      const slist< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator>=(const slist< T, Options...> & x, 
                      const slist< T, Options...> & y);
    template<typename T, class... Options> 
      void swap(slist< T, Options...> & x, slist< T, Options...> & y);
  }
}
 
namespace boost {
  namespace intrusive {
    template<typename T, class... Options> class splay_set;
    template<typename T, class... Options> struct make_splay_set;
    template<typename T, class... Options> class splay_multiset;
    template<typename T, class... Options> struct make_splay_multiset;
    template<typename T, class... Options> 
      bool operator!=(const splay_set< T, Options...> & x, 
                      const splay_set< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator>(const splay_set< T, Options...> & x, 
                     const splay_set< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator<=(const splay_set< T, Options...> & x, 
                      const splay_set< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator>=(const splay_set< T, Options...> & x, 
                      const splay_set< T, Options...> & y);
    template<typename T, class... Options> 
      void swap(splay_set< T, Options...> & x, splay_set< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator!=(const splay_multiset< T, Options...> & x, 
                      const splay_multiset< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator>(const splay_multiset< T, Options...> & x, 
                     const splay_multiset< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator<=(const splay_multiset< T, Options...> & x, 
                      const splay_multiset< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator>=(const splay_multiset< T, Options...> & x, 
                      const splay_multiset< T, Options...> & y);
    template<typename T, class... Options> 
      void swap(splay_multiset< T, Options...> & x, 
                splay_multiset< T, Options...> & y);
  }
}
 
namespace boost {
  namespace intrusive {
    template<typename T, class... Options> class splaytree;
    template<typename T, class... Options> struct make_splaytree;
    template<typename T, class... Options> 
      bool operator<(const splaytree< T, Options...> & x, 
                     const splaytree< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator==(const splaytree< T, Options...> & x, 
                      const splaytree< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator!=(const splaytree< T, Options...> & x, 
                      const splaytree< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator>(const splaytree< T, Options...> & x, 
                     const splaytree< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator<=(const splaytree< T, Options...> & x, 
                      const splaytree< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator>=(const splaytree< T, Options...> & x, 
                      const splaytree< T, Options...> & y);
    template<typename T, class... Options> 
      void swap(splaytree< T, Options...> & x, splaytree< T, Options...> & y);
  }
}
 
namespace boost {
  namespace intrusive {
    template<typename NodeTraits> class splaytree_algorithms;
  }
}
 
namespace boost {
  namespace intrusive {
    template<typename T, class... Options> class treap;
    template<typename T, class... Options> struct make_trie;
    template<typename T, class... Options> 
      bool operator<(const treap< T, Options...> & x, 
                     const treap< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator==(const treap< T, Options...> & x, 
                      const treap< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator!=(const treap< T, Options...> & x, 
                      const treap< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator>(const treap< T, Options...> & x, 
                     const treap< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator<=(const treap< T, Options...> & x, 
                      const treap< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator>=(const treap< T, Options...> & x, 
                      const treap< T, Options...> & y);
    template<typename T, class... Options> 
      void swap(treap< T, Options...> & x, treap< T, Options...> & y);
  }
}
 
namespace boost {
  namespace intrusive {
    template<typename NodeTraits> class treap_algorithms;
  }
}
 
namespace boost {
  namespace intrusive {
    template<typename T, class... Options> class treap_set;
    template<typename T, class... Options> struct make_treap_set;
    template<typename T, class... Options> class treap_multiset;
    template<typename T, class... Options> struct make_treap_multiset;
    template<typename T, class... Options> 
      bool operator!=(const treap_set< T, Options...> & x, 
                      const treap_set< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator>(const treap_set< T, Options...> & x, 
                     const treap_set< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator<=(const treap_set< T, Options...> & x, 
                      const treap_set< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator>=(const treap_set< T, Options...> & x, 
                      const treap_set< T, Options...> & y);
    template<typename T, class... Options> 
      void swap(treap_set< T, Options...> & x, treap_set< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator!=(const treap_multiset< T, Options...> & x, 
                      const treap_multiset< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator>(const treap_multiset< T, Options...> & x, 
                     const treap_multiset< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator<=(const treap_multiset< T, Options...> & x, 
                      const treap_multiset< T, Options...> & y);
    template<typename T, class... Options> 
      bool operator>=(const treap_multiset< T, Options...> & x, 
                      const treap_multiset< T, Options...> & y);
    template<typename T, class... Options> 
      void swap(treap_multiset< T, Options...> & x, 
                treap_multiset< T, Options...> & y);
  }
}
 
namespace boost {
  namespace intrusive {
    template<typename NodeTraits, link_mode_type LinkMode = normal_link> 
      struct trivial_value_traits;
  }
}