#include <iostream>
#include <sstream>
#include <cassert>
#include <array>
#include <limits>
#include <set>
#include <unordered_map>
#include <functional>
#include <memory>
#include <ostream>
#include <string>
#include <vector>
#include <map>
#include <optional>
#include <chrono>
#include <mutex>
#include <thread>
#include <utility>
#include <typeinfo>
#include <queue>
std::string add(std::string &&a, std::string &&b)
{
return a + b;
}
int main()
{
auto f1 = std::bind(add, "1", "2");
assert(f1() == "12");
auto f2 = std::bind(add, "1", std::placeholders::_1);
assert(f2("2") == "12");
auto f3 = std::bind(add, std::placeholders::_1, std::placeholders::_2);
assert(f3("1", "2") == "12");
auto f4 = std::bind(add, std::placeholders::_2, std::placeholders::_1);
assert(f4("1", "2") == "21");
return 0;
}