#include #include #include #include #include using namespace std; #define BE(v) (v).begin(), (v).end() #define INS(v) inserter (v, v.end ()) template < class T > ostream & // template to print any vector operator << (ostream & os, vector < T > v) { for (int i = 0; i < v.size (); i++) os << " " << v[i]; os << "\n"; return os; } template < class iter > void view (ostream & os, iter b, iter e) { iter it; for (it = b; it != e; it++) { os << *it << " "; } os << "\n"; } template < class T > void insertsorted (vector < T > &vec, T val) { typedef typename vector::iterator Titer; pair iter; iter = equal_range (BE (vec), val); if (iter.first==iter.second) { vec.insert (iter.first, val); } } template < class T > void insertsorted (vector & vec, const vector & vals) { for (int i=0; i < vals.size(); i++) insertsorted(vec,vals[i]); } template < class T > void erasesorted (vector < T > &vec, T val) { if (vec.size()) { typename vector < T >::iterator it; it = lower_bound (BE (vec), val); if (it == vec.end()) return; if (*it == val) { vec.erase (it); } } } template < class T > void erasesorted (vector & vec, const vector & vals) { for (int i=0; i < vals.size(); i++) erasesorted(vec,vals[i]); } template < class T > string all2string (T in, int i) { stringstream s; s << in; string ss; ss = s.str (); while (ss.length () < i) ss = "0" + ss; return ss; }