#include <iostream>
using namespace std;
template<typename T>
T half(T arg);
template<>
int half<int>(int arg)
{
return arg/2;
}
template<>
double half<double>(double arg)
{
return arg/2;
}
template<>
string half<string>(string arg)
{
return arg.substr(0, arg.length()/2);
}
int main()
{
cout << half(2) << endl;
cout << half(0.5) << endl;
cout << half(string("trivial")) << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGU8dHlwZW5hbWUgVD4KVCBoYWxmKFQgYXJnKTsKCnRlbXBsYXRlPD4KaW50IGhhbGY8aW50PihpbnQgYXJnKQp7CglyZXR1cm4gYXJnLzI7Cn0KCnRlbXBsYXRlPD4KZG91YmxlIGhhbGY8ZG91YmxlPihkb3VibGUgYXJnKQp7CglyZXR1cm4gYXJnLzI7Cn0KCnRlbXBsYXRlPD4Kc3RyaW5nIGhhbGY8c3RyaW5nPihzdHJpbmcgYXJnKQp7CglyZXR1cm4gYXJnLnN1YnN0cigwLCBhcmcubGVuZ3RoKCkvMik7Cn0KCmludCBtYWluKCkKewoJY291dCA8PCBoYWxmKDIpIDw8IGVuZGw7Cgljb3V0IDw8IGhhbGYoMC41KSA8PCBlbmRsOwoJY291dCA8PCBoYWxmKHN0cmluZygidHJpdmlhbCIpKSA8PCBlbmRsOwoJcmV0dXJuIDA7Cn0=