#include <iostream>
using namespace std;
template <typename T> auto f(T x) -> decltype(x*x)
{
return x * x;
}
template <typename T> T g(T x)
{
return x * x;
}
template <typename F> void test(F f)
{
auto a = f(32);
auto b = f(' ');
auto c = f(2000000000L);
cout << a << ' ' << b << ' ' << c << endl;
}
int main()
{
test([](auto x) { return f(x); });
test([](auto x) { return g(x); });
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnRlbXBsYXRlIDx0eXBlbmFtZSBUPiBhdXRvIGYoVCB4KSAtPiBkZWNsdHlwZSh4KngpCnsKICByZXR1cm4geCAqIHg7Cn0KCnRlbXBsYXRlIDx0eXBlbmFtZSBUPiBUIGcoVCB4KQp7CiAgcmV0dXJuIHggKiB4Owp9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgRj4gdm9pZCB0ZXN0KEYgZikKewoJYXV0byBhID0gZigzMik7CglhdXRvIGIgPSBmKCcgJyk7CglhdXRvIGMgPSBmKDIwMDAwMDAwMDBMKTsKCgljb3V0IDw8IGEgPDwgJyAnIDw8IGIgPDwgJyAnIDw8IGMgPDwgZW5kbDsKfQoKaW50IG1haW4oKQp7Cgl0ZXN0KFtdKGF1dG8geCkgeyByZXR1cm4gZih4KTsgfSk7Cgl0ZXN0KFtdKGF1dG8geCkgeyByZXR1cm4gZyh4KTsgfSk7CgoJcmV0dXJuIDA7Cn0=