#include <iostream>
template <typename T, std::size_t N> struct S {};
template <typename T> void f(T x) {
std::cout << "<T,N> version\n";
}
template<std::size_t N> void f(S<float, N> f) {
std::cout << "<float,N> version\n";
}
template<typename T> void f(S<T, 3> f) {
std::cout << "<T,3> version\n";
}
int main() {
f(S<int, 1>());
f(S<float, 2>());
f(S<char, 3>());
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHN0ZDo6c2l6ZV90IE4+IHN0cnVjdCBTIHt9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHZvaWQgZihUIHgpIHsKICAgIHN0ZDo6Y291dCA8PCAiPFQsTj4gdmVyc2lvblxuIjsKfQoKdGVtcGxhdGU8c3RkOjpzaXplX3QgTj4gdm9pZCBmKFM8ZmxvYXQsIE4+IGYpIHsKICAgIHN0ZDo6Y291dCA8PCAiPGZsb2F0LE4+IHZlcnNpb25cbiI7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgZihTPFQsIDM+IGYpIHsKICAgIHN0ZDo6Y291dCA8PCAiPFQsMz4gdmVyc2lvblxuIjsKfQoKaW50IG1haW4oKSB7CiAgICBmKFM8aW50LCAxPigpKTsKICAgIGYoUzxmbG9hdCwgMj4oKSk7CiAgICBmKFM8Y2hhciwgMz4oKSk7CgogICAgcmV0dXJuIDA7Cn0=