#include <vector>
#include <utility>
#include <algorithm>
#include <iterator>
namespace std {
template<class container>
auto begin(container& rhs) -> typename container::iterator {return rhs.begin();}
template<class container>
auto begin(const container& rhs) -> typename container::iterator {return rhs.begin();}
template<class element, int size>
element* begin(element(&rhs)[size]) {return rhs;}
template<class container>
auto end(container& rhs) -> typename container::iterator {return rhs.end();}
template<class container>
auto end(const container& rhs) -> typename container::iterator {return rhs.end();}
template<class element, int size>
element* end(element(&rhs)[size]) {return rhs+size;}
}
template<class iter1, class iter2>
iter1 search(iter1 stackbegin, iter1 stackend, iter2 needlebegin, iter2 needleend)
{return std::search(stackbegin, stackend, needlebegin, needleend);}
template<class iter1, class needlecontainer>
iter1 search(iter1 stackbegin, iter1 stackend, const needlecontainer& needle)
{return std::search(stackbegin, stackend, std::begin(needle), std::end(needle));}
template<class stackcontainer, class needlecontainer>
decltype(std::begin(std::declval<stackcontainer>()))
search(const stackcontainer& stack, const needlecontainer& needle)
{return std::search(std::begin(stack), std::end(stack), std::begin(needle), std::end(needle));}
template<class stackcontainer, class needlecontainer>
decltype(std::begin(std::declval<stackcontainer>()))
search(stackcontainer& stack, const needlecontainer& needle)
{return std::search(std::begin(stack), std::end(stack), std::begin(needle), std::end(needle));}
int main() {
std::vector<char> str1;
auto it = search(str1, "Look for this");
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPHV0aWxpdHk+CiNpbmNsdWRlIDxhbGdvcml0aG0+CiNpbmNsdWRlIDxpdGVyYXRvcj4KCm5hbWVzcGFjZSBzdGQgewogICAgdGVtcGxhdGU8Y2xhc3MgY29udGFpbmVyPgogICAgYXV0byBiZWdpbihjb250YWluZXImIHJocykgLT4gdHlwZW5hbWUgY29udGFpbmVyOjppdGVyYXRvciB7cmV0dXJuIHJocy5iZWdpbigpO30KICAgIHRlbXBsYXRlPGNsYXNzIGNvbnRhaW5lcj4KICAgIGF1dG8gYmVnaW4oY29uc3QgY29udGFpbmVyJiByaHMpIC0+IHR5cGVuYW1lIGNvbnRhaW5lcjo6aXRlcmF0b3Ige3JldHVybiByaHMuYmVnaW4oKTt9CiAgICB0ZW1wbGF0ZTxjbGFzcyBlbGVtZW50LCBpbnQgc2l6ZT4KICAgIGVsZW1lbnQqIGJlZ2luKGVsZW1lbnQoJnJocylbc2l6ZV0pIHtyZXR1cm4gcmhzO30KICAgIHRlbXBsYXRlPGNsYXNzIGNvbnRhaW5lcj4KICAgIGF1dG8gZW5kKGNvbnRhaW5lciYgcmhzKSAtPiB0eXBlbmFtZSBjb250YWluZXI6Oml0ZXJhdG9yIHtyZXR1cm4gcmhzLmVuZCgpO30KICAgIHRlbXBsYXRlPGNsYXNzIGNvbnRhaW5lcj4KICAgIGF1dG8gZW5kKGNvbnN0IGNvbnRhaW5lciYgcmhzKSAtPiB0eXBlbmFtZSBjb250YWluZXI6Oml0ZXJhdG9yIHtyZXR1cm4gcmhzLmVuZCgpO30KICAgIHRlbXBsYXRlPGNsYXNzIGVsZW1lbnQsIGludCBzaXplPgogICAgZWxlbWVudCogZW5kKGVsZW1lbnQoJnJocylbc2l6ZV0pIHtyZXR1cm4gcmhzK3NpemU7fQp9Cgp0ZW1wbGF0ZTxjbGFzcyBpdGVyMSwgY2xhc3MgaXRlcjI+Cml0ZXIxIHNlYXJjaChpdGVyMSBzdGFja2JlZ2luLCBpdGVyMSBzdGFja2VuZCwgaXRlcjIgbmVlZGxlYmVnaW4sIGl0ZXIyIG5lZWRsZWVuZCkKe3JldHVybiBzdGQ6OnNlYXJjaChzdGFja2JlZ2luLCBzdGFja2VuZCwgbmVlZGxlYmVnaW4sIG5lZWRsZWVuZCk7fQoKdGVtcGxhdGU8Y2xhc3MgaXRlcjEsIGNsYXNzIG5lZWRsZWNvbnRhaW5lcj4KaXRlcjEgc2VhcmNoKGl0ZXIxIHN0YWNrYmVnaW4sIGl0ZXIxIHN0YWNrZW5kLCBjb25zdCBuZWVkbGVjb250YWluZXImIG5lZWRsZSkKe3JldHVybiBzdGQ6OnNlYXJjaChzdGFja2JlZ2luLCBzdGFja2VuZCwgc3RkOjpiZWdpbihuZWVkbGUpLCBzdGQ6OmVuZChuZWVkbGUpKTt9Cgp0ZW1wbGF0ZTxjbGFzcyBzdGFja2NvbnRhaW5lciwgY2xhc3MgbmVlZGxlY29udGFpbmVyPgpkZWNsdHlwZShzdGQ6OmJlZ2luKHN0ZDo6ZGVjbHZhbDxzdGFja2NvbnRhaW5lcj4oKSkpCnNlYXJjaChjb25zdCBzdGFja2NvbnRhaW5lciYgc3RhY2ssIGNvbnN0IG5lZWRsZWNvbnRhaW5lciYgbmVlZGxlKQp7cmV0dXJuIHN0ZDo6c2VhcmNoKHN0ZDo6YmVnaW4oc3RhY2spLCBzdGQ6OmVuZChzdGFjayksIHN0ZDo6YmVnaW4obmVlZGxlKSwgc3RkOjplbmQobmVlZGxlKSk7fQoKdGVtcGxhdGU8Y2xhc3Mgc3RhY2tjb250YWluZXIsIGNsYXNzIG5lZWRsZWNvbnRhaW5lcj4KZGVjbHR5cGUoc3RkOjpiZWdpbihzdGQ6OmRlY2x2YWw8c3RhY2tjb250YWluZXI+KCkpKQpzZWFyY2goc3RhY2tjb250YWluZXImIHN0YWNrLCBjb25zdCBuZWVkbGVjb250YWluZXImIG5lZWRsZSkKe3JldHVybiBzdGQ6OnNlYXJjaChzdGQ6OmJlZ2luKHN0YWNrKSwgc3RkOjplbmQoc3RhY2spLCBzdGQ6OmJlZ2luKG5lZWRsZSksIHN0ZDo6ZW5kKG5lZWRsZSkpO30KCmludCBtYWluKCkgewogICAgc3RkOjp2ZWN0b3I8Y2hhcj4gc3RyMTsKICAgIGF1dG8gaXQgPSBzZWFyY2goc3RyMSwgIkxvb2sgZm9yIHRoaXMiKTsKfQ==