#include <iostream>
#include <vector>

using namespace std;

template<class T>
class ReversedProxy {
public:
    using iterator = typename T::reverse_iterator;
    iterator begin() { return begin_; }
    iterator end() { return end_; }
    ReversedProxy(const iterator& begin, const iterator& end) : begin_(begin), end_(end) {}
private:
    iterator begin_;
    iterator end_;
};
template<class T>
ReversedProxy<T> reversed(T& obj) {
    return ReversedProxy<T>(obj.rbegin(), obj.rend());
}

int main() {
    vector<int> v = {1, 2, 3, 4};
    for (int x : reversed(v)) {
        cout << x << ' ';
    } cout << endl;
    return 0;
}



