#include <iostream>
#include <vector>
#include <list>
#include <iterator>
template <typename Iterator>
void print_iterator_category(const Iterator& it) {
if (std::is_same_v<typename std::iterator_traits<Iterator>::iterator_category, std::random_access_iterator_tag>)
std::cout << "Random Access Iterator" << std::endl;
else if (std::is_same_v<typename std::iterator_traits<Iterator>::iterator_category, std::bidirectional_iterator_tag>)
std::cout << "Bidirectional Iterator" << std::endl;
else if (std::is_same_v<typename std::iterator_traits<Iterator>::iterator_category, std::forward_iterator_tag>)
std::cout << "Forward Iterator" << std::endl;
else if (std::is_same_v<typename std::iterator_traits<Iterator>::iterator_category, std::input_iterator_tag>)
std::cout << "Input Iterator" << std::endl;
else if (std::is_same_v<typename std::iterator_traits<Iterator>::iterator_category, std::output_iterator_tag>)
std::cout << "Output Iterator" << std::endl;
}
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
std::list<int> lst = {1, 2, 3, 4, 5};
std::cout << "Vector iterator category: ";
print_iterator_category(vec.begin());
std::cout << "List iterator category: ";
print_iterator_category(lst.begin());
return 0;
}