#include <iostream>
#include <vector>
#include <type_traits>
 
using namespace std;
 
template <typename T>
struct NaiveVector {
  vector<T> v;
  NaiveVector(size_t num, const T &val) : v(num, val) {
    cout << "(int num, const T &val)" << endl;
  }
 
template <typename InputIterator,
          typename ::std::enable_if<
              ::std::is_constructible<
                  T,
                  decltype(*::std::declval<InputIterator>())
              >::value
          >::type* = nullptr
>
  NaiveVector(InputIterator first, InputIterator last) : v(first, last) {
    cout << "(InputIterator first, InputIterator last)" << endl;
  }
 
  size_t size() const { return v.size(); }
};
 
int main() {
  vector<bool> vec({true, false, true, true});
  NaiveVector<bool> myVec2(vec.cbegin(), vec.cend());
  cout << "size = " << myVec2.size() << endl;
  for (auto n : myVec2.v) { cout << n << " "; }
  cout << endl;
}
				I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8dHlwZV90cmFpdHM+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnN0cnVjdCBOYWl2ZVZlY3RvciB7CiAgdmVjdG9yPFQ+IHY7CiAgTmFpdmVWZWN0b3Ioc2l6ZV90IG51bSwgY29uc3QgVCAmdmFsKSA6IHYobnVtLCB2YWwpIHsKICAgIGNvdXQgPDwgIihpbnQgbnVtLCBjb25zdCBUICZ2YWwpIiA8PCBlbmRsOwogIH0KCnRlbXBsYXRlIDx0eXBlbmFtZSBJbnB1dEl0ZXJhdG9yLAogICAgICAgICAgdHlwZW5hbWUgOjpzdGQ6OmVuYWJsZV9pZjwKICAgICAgICAgICAgICA6OnN0ZDo6aXNfY29uc3RydWN0aWJsZTwKICAgICAgICAgICAgICAgICAgVCwKICAgICAgICAgICAgICAgICAgZGVjbHR5cGUoKjo6c3RkOjpkZWNsdmFsPElucHV0SXRlcmF0b3I+KCkpCiAgICAgICAgICAgICAgPjo6dmFsdWUKICAgICAgICAgID46OnR5cGUqID0gbnVsbHB0cgo+CiAgTmFpdmVWZWN0b3IoSW5wdXRJdGVyYXRvciBmaXJzdCwgSW5wdXRJdGVyYXRvciBsYXN0KSA6IHYoZmlyc3QsIGxhc3QpIHsKICAgIGNvdXQgPDwgIihJbnB1dEl0ZXJhdG9yIGZpcnN0LCBJbnB1dEl0ZXJhdG9yIGxhc3QpIiA8PCBlbmRsOwogIH0KCiAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiB2LnNpemUoKTsgfQp9OwoKaW50IG1haW4oKSB7CiAgdmVjdG9yPGJvb2w+IHZlYyh7dHJ1ZSwgZmFsc2UsIHRydWUsIHRydWV9KTsKICBOYWl2ZVZlY3Rvcjxib29sPiBteVZlYzIodmVjLmNiZWdpbigpLCB2ZWMuY2VuZCgpKTsKICBjb3V0IDw8ICJzaXplID0gIiA8PCBteVZlYzIuc2l6ZSgpIDw8IGVuZGw7CiAgZm9yIChhdXRvIG4gOiBteVZlYzIudikgeyBjb3V0IDw8IG4gPDwgIiAiOyB9CiAgY291dCA8PCBlbmRsOwp9