#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;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnRlbXBsYXRlIDx0eXBlbmFtZSBUPiBhdXRvIGYoVCB4KSAtPiBkZWNsdHlwZSh4KngpCnsKICByZXR1cm4geCAqIHg7Cn0KCnRlbXBsYXRlIDx0eXBlbmFtZSBUPiBUIGcgKFQgeCkgCnsKCXJldHVybiB4Kng7Cn0KCnRlbXBsYXRlIDx0eXBlbmFtZSBGPiB2b2lkIHRlc3QoRiBmKQp7CglhdXRvIGEgPSBmKDMyKTsKCWF1dG8gYiA9IGYoJyAnKTsKCWF1dG8gYyA9IGYoMjAwMDAwMDAwMEwpOwoKCWNvdXQgPDwgYSA8PCAnICcgPDwgYiA8PCAnICcgPDwgYyA8PCBlbmRsOwp9CgppbnQgbWFpbigpCnsKCXRlc3QoW10oYXV0byB4KXsgcmV0dXJuIGYoeCk7IH0pOwoJdGVzdChbXShhdXRvIHgpeyByZXR1cm4gZyh4KTsgfSk7CgoJcmV0dXJuIDA7Cn0=