struct random_access_iterator_tag {};
template <class Category, class T, class Distance = ptrdiff_t, class Pointer = T*, class Reference = T&>
struct random_access_iterator_tag {};
template <class Category, class T, class Distance = ptrdiff_t, class Pointer = T*, class Reference = T&>