#include <iostream>
#include <string>
#include <algorithm>
#include <locale>
#include <cassert>
int main()
{
std::string test("hi how are you"),reference("ih woh era uoy");
std::locale const& loc=std::locale();
auto pos=test.begin();
auto next_token=
[&](char c) {
return std::isspace(c,loc)!=std::isspace(*pos,loc);
};
for (auto it=std::find_if(pos,test.end(),next_token);
it!=test.end();
it=std::find_if(pos,test.end(),next_token)) {
if (!std::isspace(*pos,loc))
std::reverse(pos,it);
pos=it;
}
std::reverse(pos,test.end());
std::cout<<test<<std::endl;
assert(test==reference);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8bG9jYWxlPgojaW5jbHVkZSA8Y2Fzc2VydD4KCgppbnQgbWFpbigpCnsKICAgIHN0ZDo6c3RyaW5nIHRlc3QoImhpICAgaG93IGFyZSB5b3UiKSxyZWZlcmVuY2UoImloICAgd29oIGVyYSB1b3kiKTsKICAgIAogICAgc3RkOjpsb2NhbGUgY29uc3QmIGxvYz1zdGQ6OmxvY2FsZSgpOwoKICAgIGF1dG8gcG9zPXRlc3QuYmVnaW4oKTsKCiAgICBhdXRvIG5leHRfdG9rZW49CiAgICAgWyZdKGNoYXIgYykgewogICAgICAgICAgIHJldHVybiBzdGQ6Omlzc3BhY2UoYyxsb2MpIT1zdGQ6Omlzc3BhY2UoKnBvcyxsb2MpOwogICAgIH07CgogICAgZm9yIChhdXRvIGl0PXN0ZDo6ZmluZF9pZihwb3MsdGVzdC5lbmQoKSxuZXh0X3Rva2VuKTsKICAgICAgICAgICAgICBpdCE9dGVzdC5lbmQoKTsKICAgICAgICAgICAgICBpdD1zdGQ6OmZpbmRfaWYocG9zLHRlc3QuZW5kKCksbmV4dF90b2tlbikpIHsKICAgICAgICAgICAgICAgaWYgKCFzdGQ6Omlzc3BhY2UoKnBvcyxsb2MpKQogICAgICAgICAgICAgICAgICAgIHN0ZDo6cmV2ZXJzZShwb3MsaXQpOwogICAgICAgICAgICAgICBwb3M9aXQ7CiAgICB9CiAgICBzdGQ6OnJldmVyc2UocG9zLHRlc3QuZW5kKCkpOwogICAgCiAgICBzdGQ6OmNvdXQ8PHRlc3Q8PHN0ZDo6ZW5kbDsKCiAgICBhc3NlcnQodGVzdD09cmVmZXJlbmNlKTsKfQ==