#include<iostream>
#include<algorithm>
#include<list>
#include<iterator>
#include<numeric>


using namespace std;

template<typename T> class SequenceGen {
private:
  T _start; 
  T _step;
public:
  SequenceGen(T start = T(),T step = 1 ): _start(start),_step(step){};

  T operator()() {T tmp = _start; _start+= _step; return tmp;}
};

const size_t n = 20 ;




int print(int i,int j) {
  cout<<"("<<i<<":"<<j<<")";
  return 0;
}

main() {

  list<int> li;
  list<int> res;
  generate_n(back_insert_iterator<list<int> >(li),10,SequenceGen<int>(1,2));  

  adjacent_difference(li.begin(),li.end(),back_insert_iterator<list<int> >(res),print);

}