#include <iostream>
template <typename t> class Number;
template <typename t>
std::ostream & operator<<(std::ostream & os, const Number<t>& a);
template <typename t>
Number<t> operator%(Number<t> a, Number<t> b);
template <typename t>
class Number
{
private:
t n;
public:
Number(t a) :n{ a } {};
Number() :n{ t() } {};
friend std::ostream & operator<< <t>(std::ostream & os, const Number& a);
friend Number operator%<t>(Number a, Number b);
};
template <typename t>
std::ostream & operator<<(std::ostream & os, const Number<t>& a)
{
os << a.n;
return os;
}
template <typename t>
Number<t> operator%(Number<t> a, Number<t> b)
{
return Number<t>(a.n % b.n);
}
int main()
{
Number<int> a(10);
Number<int> b(20);
Number<int> c = a % b;
std::cout << c << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGUgPHR5cGVuYW1lIHQ+IGNsYXNzIE51bWJlcjsKCnRlbXBsYXRlIDx0eXBlbmFtZSB0PgpzdGQ6Om9zdHJlYW0gJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSAmIG9zLCBjb25zdCBOdW1iZXI8dD4mIGEpOwoKdGVtcGxhdGUgPHR5cGVuYW1lIHQ+Ck51bWJlcjx0PiBvcGVyYXRvciUoTnVtYmVyPHQ+IGEsIE51bWJlcjx0PiBiKTsKCnRlbXBsYXRlIDx0eXBlbmFtZSB0PgpjbGFzcyBOdW1iZXIKewpwcml2YXRlOgogICAgdCBuOwpwdWJsaWM6CiAgICBOdW1iZXIodCBhKSA6bnsgYSB9IHt9OwogICAgTnVtYmVyKCkgOm57IHQoKSB9IHt9OwogICAgZnJpZW5kIHN0ZDo6b3N0cmVhbSAmIG9wZXJhdG9yPDwgPHQ+KHN0ZDo6b3N0cmVhbSAmIG9zLCBjb25zdCBOdW1iZXImIGEpOwogICAgZnJpZW5kIE51bWJlciBvcGVyYXRvciU8dD4oTnVtYmVyIGEsIE51bWJlciBiKTsKfTsKCnRlbXBsYXRlIDx0eXBlbmFtZSB0PgpzdGQ6Om9zdHJlYW0gJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSAmIG9zLCBjb25zdCBOdW1iZXI8dD4mIGEpCnsKICAgIG9zIDw8IGEubjsKICAgIHJldHVybiBvczsKfQoKdGVtcGxhdGUgPHR5cGVuYW1lIHQ+IApOdW1iZXI8dD4gb3BlcmF0b3IlKE51bWJlcjx0PiBhLCBOdW1iZXI8dD4gYikKewogICAgcmV0dXJuIE51bWJlcjx0PihhLm4gJSBiLm4pOwp9CgppbnQgbWFpbigpCnsKICAgTnVtYmVyPGludD4gYSgxMCk7CiAgIE51bWJlcjxpbnQ+IGIoMjApOwogICBOdW1iZXI8aW50PiBjID0gYSAlIGI7CiAgIHN0ZDo6Y291dCA8PCBjIDw8IHN0ZDo6ZW5kbDsKfQo=