#include <iostream>
#include <numeric>
#include <regex>
#include <string>
#include <vector>
 
using namespace std;
 
int main() {
	const auto first = "Somebody"s;
	const auto second = "words"s;
	const vector<string> words = { "in"s, "lorem"s, "ipsum"s };
	const auto input = "Somebody has typed in some words here."s;
	const regex re("\\b" + first + accumulate(next(cbegin(words)), cend(words), "\\b(?:(\\b" + words.front(), [](const auto& lhs, const auto& rhs) { return lhs + "\\b|\\b" + rhs; }) + "\\b).*|.)*?\\b" + second + "\\b");
	smatch sm;
 
	if (regex_search(input, sm, re) && sm[1].length() == 0U) {
		cout << "match\n";
	} else {
		cout << "not a match\n";
	}
}
				I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bnVtZXJpYz4KI2luY2x1ZGUgPHJlZ2V4PgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dmVjdG9yPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBtYWluKCkgewoJY29uc3QgYXV0byBmaXJzdCA9ICJTb21lYm9keSJzOwoJY29uc3QgYXV0byBzZWNvbmQgPSAid29yZHMiczsKCWNvbnN0IHZlY3RvcjxzdHJpbmc+IHdvcmRzID0geyAiaW4icywgImxvcmVtInMsICJpcHN1bSJzIH07Cgljb25zdCBhdXRvIGlucHV0ID0gIlNvbWVib2R5IGhhcyB0eXBlZCBpbiBzb21lIHdvcmRzIGhlcmUuInM7Cgljb25zdCByZWdleCByZSgiXFxiIiArIGZpcnN0ICsgYWNjdW11bGF0ZShuZXh0KGNiZWdpbih3b3JkcykpLCBjZW5kKHdvcmRzKSwgIlxcYig/OihcXGIiICsgd29yZHMuZnJvbnQoKSwgW10oY29uc3QgYXV0byYgbGhzLCBjb25zdCBhdXRvJiByaHMpIHsgcmV0dXJuIGxocyArICJcXGJ8XFxiIiArIHJoczsgfSkgKyAiXFxiKS4qfC4pKj9cXGIiICsgc2Vjb25kICsgIlxcYiIpOwoJc21hdGNoIHNtOwoKCWlmIChyZWdleF9zZWFyY2goaW5wdXQsIHNtLCByZSkgJiYgc21bMV0ubGVuZ3RoKCkgPT0gMFUpIHsKCQljb3V0IDw8ICJtYXRjaFxuIjsKCX0gZWxzZSB7CgkJY291dCA8PCAibm90IGEgbWF0Y2hcbiI7Cgl9Cn0=