/*
行列xを表示
1 2
3 4
5 6
行列yを表示
1 2 4
3 6 9
行列xとyの積を表示
*/
/* 計算する行列 */
#define MATRIXA {{1,2},{3,4},{5,6}} /* 行列A */
#define MATRIXA_X 3 /* 行列Aの大きさ */
#define MATRIXA_Y 2 /* 行列Aの大きさ */
#define MATRIXB {{1,2,4},{3,6,9}} /* 行列A */
#define MATRIXB_X 2 /* 行列Bの大きさ */
#define MATRIXB_Y 3 /* 行列Bの大きさ */
/*-- 以上定数 --*/
/* 以下ソース */
# define s float
#define i int
# define XX \
void X
# define PF "%f"
# define a MATRIXA
# define ic(o) \
++o
;
# define a1 MATRIXA_X
# define C char
# define a2 MATRIXA_Y
C t2[]= {0xe8,
0xa1,0x8c,0xe5,0x88,0x97,0x79,0xe3,0x82,0x92,
0xe8,0xa1,0xa8,0xe7,0xa4,0xba,0x0};
# define p(o) f("%s\n",o)
# define b1 MATRIXB_X
#define S sizeof
# define z 0
# define f __builtin_printf
# define b MATRIXB
# define b2 MATRIXB_Y
# define sz (4*la*lb)
#define SP " "
#define EY p(e)
#define M main
C t1[]= {0xe8,0xa1,0x8c,0xe5,
0x88,0x97,0x78,0xe3,0x82,0x92,0xe8,0xa1,0xa8,0xe7,0xa4,0xba,0x0};
#define B ()
#define E X B, 0;
# define l(a) S(a)/S(a[0])
# define al __builtin_alloca \
#define zr(o,c) \
__builtin_memset(o,z,c)
# define r for
#define e \
""
#define op PF SP
C t3[]= {0xe8,0xa1,0x8c,0xe5,0x88,0x97,0x78,0xe3,0x81,0xa8,0x79,0xe3,0x81,0xae,0xe7,0xa9,0x8d,0xe3,0x82,0x92,0xe8,0xa1,0xa8,0xe7,0xa4,0xba,0x0};
XX B{
s ma[a1][a2]=a, mb[b1][b2]=b;
i la=l(ma),la2=l(ma[z]);i lb=l(mb[z]),n=z,x,y,Z;
s*o=al(sz);zr(o,sz);
i lb2=l(mb);
r(Z=z;Z<la;ic(Z)){r(y=z;y<lb;
ic(y)){r(x=z;x<
la2;ic(x)){o[n]+=ma[Z][x]*mb[x][y];
}ic(n);}}
p(t1);r(x=z;x<la;ic(x)){r(y=z;y<la2;ic(y)){
f(op,ma[x][y]);}
p(e);}EY;p(t2);r
(x=z;x<lb2;ic(x)){r(
y=z;y<lb;ic(y)){f(op,mb[x][y]);}
p(e);}EY;p(t3);
r(n=z,y=z;y<lb;ic(y)){r(x=z;x<la;ic(x)){
f(op,o[n++]);}
p(e);}}i M B{return
E}
LyoK6KGM5YiXeOOCkuihqOekuiAKMSAyIAozIDQgCjUgNiAKCuihjOWIl3njgpLooajnpLogCjEgMiA0IAozIDYgOSAKCuihjOWIl3jjgah544Gu56mN44KS6KGo56S6IAogKi8KLyog6KiI566X44GZ44KL6KGM5YiXICovCiNkZWZpbmUgTUFUUklYQSB7ezEsMn0sezMsNH0sezUsNn19ICAgIC8qIOihjOWIl0EgKi8KI2RlZmluZSBNQVRSSVhBX1ggMwkJLyog6KGM5YiXQeOBruWkp+OBjeOBlSAqLwojZGVmaW5lIE1BVFJJWEFfWSAyCQkvKiDooYzliJdB44Gu5aSn44GN44GVICovCiNkZWZpbmUgTUFUUklYQiB7ezEsMiw0fSx7Myw2LDl9fQkvKiDooYzliJdBICovCiNkZWZpbmUgTUFUUklYQl9YIDIJCS8qIOihjOWIl0Ljga7lpKfjgY3jgZUgKi8KI2RlZmluZSBNQVRSSVhCX1kgMwkJLyog6KGM5YiXQuOBruWkp+OBjeOBlSAqLwovKi0tIOS7peS4iuWumuaVsCAtLSovCgoKLyog5Lul5LiL44K944O844K5ICovCiMJZGVmaW5lIHMJCQkgZmxvYXQKI2RlZmluZSBpIGludAoJIwlkZWZpbmUgWFggXAp2b2lkIFgKIwkJCQlkZWZpbmUgCVBGIAkiJWYiCgkjCQlkZWZpbmUgYQkgTUFUUklYQQoJCQkJIwlkZWZpbmUgICAgICAgICAgICAgaWMobykgXAorK28KOwojCWRlZmluZSBhMSBNQVRSSVhBX1gKCQkJIwkJZGVmaW5lIEMgY2hhcgojCQlkZWZpbmUgYTIgTUFUUklYQV9ZCglDIHQyW109IHsweGU4LAoJCQkweGExLDB4OGMsMHhlNSwweDg4LDB4OTcsMHg3OSwweGUzLDB4ODIsMHg5MiwKMHhlOCwweGExLDB4YTgsMHhlNywweGE0LDB4YmEsMHgwfTsKCSMJCQlkZWZpbmUgCXAobykgZigiJXNcbiIsbykKIwkJZGVmaW5lIAkJYjEgTUFUUklYQl9YCiNkZWZpbmUgUwkJIHNpemVvZgoJIwlkZWZpbmUgeiAwCgkJIwlkZWZpbmUgZiBfX2J1aWx0aW5fcHJpbnRmCiMJCQlkZWZpbmUgCWIgTUFUUklYQgojCQlkZWZpbmUJCQkgYjIgTUFUUklYQl9ZCgkjCQkJZGVmaW5lIHN6ICg0KmxhKmxiKQojZGVmaW5lIAkJCQlTUCAiICIKCQkjZGVmaW5lIEVZIHAoZSkKI2RlZmluZSBNIG1haW4KCUMgdDFbXT0gCXsweGU4LDB4YTEsMHg4YywweGU1LAoweDg4LDB4OTcsMHg3OCwweGUzLDB4ODIsMHg5MiwweGU4LDB4YTEsMHhhOCwweGU3LDB4YTQsMHhiYSwweDB9OwojZGVmaW5lIEIgKCkKCQkjZGVmaW5lIEUgWCBCLCAwOwojCWRlZmluZSBsKGEpIFMoYSkvUyhhWzBdKQoJCSMgZGVmaW5lIGFsIF9fYnVpbHRpbl9hbGxvY2EgXAoJCiNkZWZpbmUgenIobyxjKSBcCglfX2J1aWx0aW5fbWVtc2V0KG8seixjKQoJIyBkZWZpbmUgciBmb3IKI2RlZmluZSBlIFwKIiIKI2RlZmluZSBvcCBQRiBTUAoJQyB0M1tdPSB7MHhlOCwweGExLDB4OGMsMHhlNSwweDg4LDB4OTcsMHg3OCwweGUzLDB4ODEsMHhhOCwweDc5LDB4ZTMsMHg4MSwweGFlLDB4ZTcsMHhhOSwweDhkLDB4ZTMsMHg4MiwweDkyLDB4ZTgsMHhhMSwweGE4LDB4ZTcsMHhhNCwweGJhLDB4MH07ClhYIEJ7CnMgbWFbYTFdW2EyXT1hLCBtYltiMV1bYjJdPWI7CmkgbGE9bChtYSksbGEyPWwobWFbel0pO2kgbGI9bChtYlt6XSksbj16LHgseSxaOwpzKm89YWwoc3opO3pyKG8sc3opOwppIGxiMj1sKG1iKTsKcihaPXo7WjxsYTtpYyhaKSl7cih5PXo7eTxsYjsKaWMoeSkpe3IoeD16O3g8CmxhMjtpYyh4KSl7b1tuXSs9bWFbWl1beF0qbWJbeF1beV07Cn1pYyhuKTt9fQpwKHQxKTtyKHg9ejt4PGxhO2ljKHgpKXtyKHk9ejt5PGxhMjtpYyh5KSl7CmYob3AsbWFbeF1beV0pO30KcChlKTt9RVk7cCh0Mik7cgooeD16O3g8bGIyO2ljKHgpKXtyKAp5PXo7eTxsYjtpYyh5KSl7ZihvcCxtYlt4XVt5XSk7fQpwKGUpO31FWTtwKHQzKTsKcihuPXoseT16O3k8bGI7aWMoeSkpe3IoeD16O3g8bGE7aWMoeCkpewpmKG9wLG9bbisrXSk7fQpwKGUpO319aSBNIEJ7cmV0dXJuCkV9Cg==