#include <iostream>
#include <functional>
void foo(int a, int b, int c) {
std::cout << "a: " << a << "\n" "b: " << b << "\n" "c: " << c << "\n";
}
int main() {
auto foo_normal = std::bind(foo, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3);
auto foo_reversed = std::bind(foo, std::placeholders::_3, std::placeholders::_2, std::placeholders::_1);
auto foo_with_a1 = std::bind(foo, 1, std::placeholders::_1, std::placeholders::_2);
auto foo_with_b2 = std::bind(foo, std::placeholders::_1, 2, std::placeholders::_2);
auto foo_with_c3 = std::bind(foo, std::placeholders::_1, std::placeholders::_2, 3);
auto foo_with_a1c3 = std::bind(foo, 1, std::placeholders::_1, 3);
auto foo_with_a1b2c3 = std::bind(foo, 1, 2, 3);
foo_normal(1, 2, 3);
foo_reversed(3, 2, 1);
foo_with_a1(2, 3);
foo_with_b2(1, 3);
foo_with_c3(1, 2);
foo_with_a1c3(2);
foo_with_a1b2c3();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KCnZvaWQgZm9vKGludCBhLCBpbnQgYiwgaW50IGMpIHsKICAgIHN0ZDo6Y291dCA8PCAiYTogIiA8PCBhIDw8ICJcbiIgImI6ICIgPDwgYiA8PCAiXG4iICJjOiAiIDw8IGMgPDwgIlxuIjsKfQoKaW50IG1haW4oKSB7CiAgICBhdXRvIGZvb19ub3JtYWwgPSBzdGQ6OmJpbmQoZm9vLCBzdGQ6OnBsYWNlaG9sZGVyczo6XzEsIHN0ZDo6cGxhY2Vob2xkZXJzOjpfMiwgc3RkOjpwbGFjZWhvbGRlcnM6Ol8zKTsKICAgIGF1dG8gZm9vX3JldmVyc2VkID0gc3RkOjpiaW5kKGZvbywgc3RkOjpwbGFjZWhvbGRlcnM6Ol8zLCBzdGQ6OnBsYWNlaG9sZGVyczo6XzIsIHN0ZDo6cGxhY2Vob2xkZXJzOjpfMSk7CiAgICBhdXRvIGZvb193aXRoX2ExID0gc3RkOjpiaW5kKGZvbywgMSwgc3RkOjpwbGFjZWhvbGRlcnM6Ol8xLCBzdGQ6OnBsYWNlaG9sZGVyczo6XzIpOwogICAgYXV0byBmb29fd2l0aF9iMiA9IHN0ZDo6YmluZChmb28sIHN0ZDo6cGxhY2Vob2xkZXJzOjpfMSwgMiwgc3RkOjpwbGFjZWhvbGRlcnM6Ol8yKTsKICAgIGF1dG8gZm9vX3dpdGhfYzMgPSBzdGQ6OmJpbmQoZm9vLCBzdGQ6OnBsYWNlaG9sZGVyczo6XzEsIHN0ZDo6cGxhY2Vob2xkZXJzOjpfMiwgMyk7CiAgICBhdXRvIGZvb193aXRoX2ExYzMgPSBzdGQ6OmJpbmQoZm9vLCAxLCBzdGQ6OnBsYWNlaG9sZGVyczo6XzEsIDMpOwogICAgYXV0byBmb29fd2l0aF9hMWIyYzMgPSBzdGQ6OmJpbmQoZm9vLCAxLCAyLCAzKTsKCiAgICBmb29fbm9ybWFsKDEsIDIsIDMpOwogICAgZm9vX3JldmVyc2VkKDMsIDIsIDEpOwogICAgZm9vX3dpdGhfYTEoMiwgMyk7CiAgICBmb29fd2l0aF9iMigxLCAzKTsKICAgIGZvb193aXRoX2MzKDEsIDIpOwogICAgZm9vX3dpdGhfYTFjMygyKTsKICAgIGZvb193aXRoX2ExYjJjMygpOwoKICAgIHJldHVybiAwOwp9