#include <iostream>
using namespace std;

auto list = [](auto ...xs) { 
 return [=](auto access) {
  return access(xs...);
 }; 
};

template<bool = true>
struct printer {
 template<typename List>
 static void run (List xs) {
  return xs([](auto first, auto... rest) {
   cout << first << " ";
   printer<(sizeof...(rest) > 0)>::run(list(rest...));
  });
 }
};

template<>
struct printer<false> {
 template<typename List>
 static void run (List xs) {}
};

auto print = [](auto xs) { 
 return xs([=](auto ...z) {
  printer<(sizeof...(z) > 0)>::run(xs);
 });
};


int main(int, char**) {
 string str;
 cin >> str;
 print(list(1, str, "Hello"));
 return 0;
}