#include <blitz/array.h>
#include <blitz/array/cartesian.h>
#include <list>

using namespace blitz;

int main()
{
    list<int> index1;
    index1.push_back(5);
    index1.push_back(7);
    index1.push_back(9);

    list<int> index2;
    index2.push_back(1);
    index2.push_back(2);
    index2.push_back(4);
    index2.push_back(7);

    CartesianProduct<TinyVector<int,2>,list<int>,2> indexSet(index1,index2);
    typedef CartesianProduct<TinyVector<int,2>,list<int>,2>::iterator T_iterator;

    T_iterator iter = indexSet.begin(), end = indexSet.end();
    for (; iter != end; ++iter)
        cout << *iter << endl;

    return 0;
}

