#pragma once #include using namespace std; template using ptr = shared_ptr; template Out extractPair(pair p, function f) { In1 fst = p.first; In2 snd = p.second; return f(fst, snd); } template void assignPair(pair p, T1& fst, T2& snd) { fst = p.first; snd = p.second; } template vector populate(int n, function f) { vector v(n); for (int i = 0; i < n; i++) v[i] = f(i); return v; } template T id(T x) { return x; }