#include <cstdio>
template <int a, int b>
struct entry {
~entry() {printf("%d*%d=%d\n", a, b, a * b);}
};
template <int maxa, int maxb>
struct row: public entry<maxa, maxb>, row<maxa, maxb-1> {};
template <int maxa>
struct row<maxa, 1>: public entry<maxa, 1> {};
template <int maxa, int maxb>
struct table: public row<maxa, maxb>, table<maxa-1, maxb> {};
template <int maxb>
struct table<1, maxb>: public row<1, maxb> {};
int main () {
table<9, 9> t;
}
I2luY2x1ZGUgPGNzdGRpbz4KCnRlbXBsYXRlIDxpbnQgYSwgaW50IGI+CnN0cnVjdCBlbnRyeSB7CiAgICB+ZW50cnkoKSB7cHJpbnRmKCIlZColZD0lZFxuIiwgYSwgYiwgYSAqIGIpO30KfTsKCnRlbXBsYXRlIDxpbnQgbWF4YSwgaW50IG1heGI+CnN0cnVjdCByb3c6IHB1YmxpYyBlbnRyeTxtYXhhLCBtYXhiPiwgcm93PG1heGEsIG1heGItMT4ge307Cgp0ZW1wbGF0ZSA8aW50IG1heGE+CnN0cnVjdCByb3c8bWF4YSwgMT46IHB1YmxpYyBlbnRyeTxtYXhhLCAxPiB7fTsKCnRlbXBsYXRlIDxpbnQgbWF4YSwgaW50IG1heGI+CnN0cnVjdCB0YWJsZTogcHVibGljIHJvdzxtYXhhLCBtYXhiPiwgdGFibGU8bWF4YS0xLCBtYXhiPiB7fTsKCnRlbXBsYXRlIDxpbnQgbWF4Yj4Kc3RydWN0IHRhYmxlPDEsIG1heGI+OiBwdWJsaWMgcm93PDEsIG1heGI+IHt9OwoKaW50IG1haW4gKCkgewogICAgdGFibGU8OSwgOT4gdDsKfQo=