#include <iostream>
#include <valarray>
template<class T> class Slice_iter {
std::valarray<T>* v;
std::slice s;
size_t curr;
T& ref(size_t i) const {
return (*v)[s.start()+i*s.stride()];
}
public:
Slice_iter(std::valarray<T> *vv, std::slice ss):v(vv),s(ss),curr(0) {}
Slice_iter end() {
Slice_iter t=*this;
t.curr=s.size();
return t;
}
Slice_iter& operator++() {curr++; return *this;}
Slice_iter operator++(int) {Slice_iter t=*this; curr++; return t;}
T& operator[] (size_t i) {return ref(curr=i);}
T& operator* () {return ref(curr);}
size_t size() const {return s.size();}
template<class U>
friend bool operator==(const Slice_iter<U>&, const Slice_iter<U>&);
templ