- #include <iostream> 
- #include <iomanip> 
-   
- constexpr unsigned int transform1(unsigned int x) 
- { 
-   return ((x << 8) | x); 
- } 
-   
- constexpr unsigned int transform2(unsigned int x) 
- { 
-   return (((x & 0x00f000f0) << 4) | (x & 0x000f000f)); 
- } 
-   
- constexpr unsigned int transform3(unsigned int x) 
- { 
-   return ((x << 4) | x); 
- } 
-   
- constexpr unsigned int transform(unsigned int x) 
- { 
-   return transform3(transform2(transform1(x))); 
- } 
-   
- template <unsigned int argb> struct aarrggbb_v1 
- { 
- 	static const unsigned int value = transform(argb); 
- }; 
-   
- template <unsigned int argb> struct aarrggbb_v2 
- { 
- 	static const unsigned int value = 
- 		(argb & 0xf000) * 0x11000 + 
- 		(argb & 0x0f00) * 0x01100 + 
-       	(argb & 0x00f0) * 0x00110 + 
-       	(argb & 0x000f) * 0x00011;; 
- }; 
-   
- #define EXPAND16(x) aarrggbb_v1<x + 0>::value, \ 
- aarrggbb_v1<x + 1>::value, \ 
- aarrggbb_v1<x + 2>::value, \ 
- aarrggbb_v1<x + 3>::value, \ 
- aarrggbb_v1<x + 4>::value, \ 
- aarrggbb_v1<x + 5>::value, \ 
- aarrggbb_v1<x + 6>::value, \ 
- aarrggbb_v1<x + 7>::value, \ 
- aarrggbb_v1<x + 8>::value, \ 
- aarrggbb_v1<x + 9>::value, \ 
- aarrggbb_v1<x + 0xa>::value, \ 
- aarrggbb_v1<x + 0xb>::value, \ 
- aarrggbb_v1<x + 0xc>::value, \ 
- aarrggbb_v1<x + 0xd>::value, \ 
- aarrggbb_v1<x + 0xe>::value, \ 
- aarrggbb_v1<x + 0xf>::value 
-   
- #define EXPAND EXPAND16(0), \ 
- EXPAND16(0x10), \ 
- EXPAND16(0x20), \ 
- EXPAND16(0x30), \ 
- EXPAND16(0x40), \ 
- EXPAND16(0x50), \ 
- EXPAND16(0x60), \ 
- EXPAND16(0x70), \ 
- EXPAND16(0x80), \ 
- EXPAND16(0x90), \ 
- EXPAND16(0xa0), \ 
- EXPAND16(0xb0), \ 
- EXPAND16(0xc0), \ 
- EXPAND16(0xd0), \ 
- EXPAND16(0xe0), \ 
- EXPAND16(0xf0), \ 
-   
- unsigned int table[] = 
- { 
- 	EXPAND	 
- }; 
-   
- int main() 
- { 
- 	for (auto n : table) 
- 		std::cout << std::hex << n << '\n'; 
-   
- 	return 0; 
- } 
				I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KCmNvbnN0ZXhwciB1bnNpZ25lZCBpbnQgdHJhbnNmb3JtMSh1bnNpZ25lZCBpbnQgeCkKewogIHJldHVybiAoKHggPDwgOCkgfCB4KTsKfQoKY29uc3RleHByIHVuc2lnbmVkIGludCB0cmFuc2Zvcm0yKHVuc2lnbmVkIGludCB4KQp7CiAgcmV0dXJuICgoKHggJiAweDAwZjAwMGYwKSA8PCA0KSB8ICh4ICYgMHgwMDBmMDAwZikpOwp9Cgpjb25zdGV4cHIgdW5zaWduZWQgaW50IHRyYW5zZm9ybTModW5zaWduZWQgaW50IHgpCnsKICByZXR1cm4gKCh4IDw8IDQpIHwgeCk7Cn0KCmNvbnN0ZXhwciB1bnNpZ25lZCBpbnQgdHJhbnNmb3JtKHVuc2lnbmVkIGludCB4KQp7CiAgcmV0dXJuIHRyYW5zZm9ybTModHJhbnNmb3JtMih0cmFuc2Zvcm0xKHgpKSk7Cn0KCnRlbXBsYXRlIDx1bnNpZ25lZCBpbnQgYXJnYj4gc3RydWN0IGFhcnJnZ2JiX3YxCnsKCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgdmFsdWUgPSB0cmFuc2Zvcm0oYXJnYik7Cn07Cgp0ZW1wbGF0ZSA8dW5zaWduZWQgaW50IGFyZ2I+IHN0cnVjdCBhYXJyZ2diYl92Mgp7CglzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHZhbHVlID0KCQkoYXJnYiAmIDB4ZjAwMCkgKiAweDExMDAwICsKCQkoYXJnYiAmIDB4MGYwMCkgKiAweDAxMTAwICsKICAgICAgCShhcmdiICYgMHgwMGYwKSAqIDB4MDAxMTAgKwogICAgICAJKGFyZ2IgJiAweDAwMGYpICogMHgwMDAxMTs7Cn07CgojZGVmaW5lIEVYUEFORDE2KHgpIGFhcnJnZ2JiX3YxPHggKyAwPjo6dmFsdWUsIFwKYWFycmdnYmJfdjE8eCArIDE+Ojp2YWx1ZSwgXAphYXJyZ2diYl92MTx4ICsgMj46OnZhbHVlLCBcCmFhcnJnZ2JiX3YxPHggKyAzPjo6dmFsdWUsIFwKYWFycmdnYmJfdjE8eCArIDQ+Ojp2YWx1ZSwgXAphYXJyZ2diYl92MTx4ICsgNT46OnZhbHVlLCBcCmFhcnJnZ2JiX3YxPHggKyA2Pjo6dmFsdWUsIFwKYWFycmdnYmJfdjE8eCArIDc+Ojp2YWx1ZSwgXAphYXJyZ2diYl92MTx4ICsgOD46OnZhbHVlLCBcCmFhcnJnZ2JiX3YxPHggKyA5Pjo6dmFsdWUsIFwKYWFycmdnYmJfdjE8eCArIDB4YT46OnZhbHVlLCBcCmFhcnJnZ2JiX3YxPHggKyAweGI+Ojp2YWx1ZSwgXAphYXJyZ2diYl92MTx4ICsgMHhjPjo6dmFsdWUsIFwKYWFycmdnYmJfdjE8eCArIDB4ZD46OnZhbHVlLCBcCmFhcnJnZ2JiX3YxPHggKyAweGU+Ojp2YWx1ZSwgXAphYXJyZ2diYl92MTx4ICsgMHhmPjo6dmFsdWUKCiNkZWZpbmUgRVhQQU5EIEVYUEFORDE2KDApLCBcCkVYUEFORDE2KDB4MTApLCBcCkVYUEFORDE2KDB4MjApLCBcCkVYUEFORDE2KDB4MzApLCBcCkVYUEFORDE2KDB4NDApLCBcCkVYUEFORDE2KDB4NTApLCBcCkVYUEFORDE2KDB4NjApLCBcCkVYUEFORDE2KDB4NzApLCBcCkVYUEFORDE2KDB4ODApLCBcCkVYUEFORDE2KDB4OTApLCBcCkVYUEFORDE2KDB4YTApLCBcCkVYUEFORDE2KDB4YjApLCBcCkVYUEFORDE2KDB4YzApLCBcCkVYUEFORDE2KDB4ZDApLCBcCkVYUEFORDE2KDB4ZTApLCBcCkVYUEFORDE2KDB4ZjApLCBcCgp1bnNpZ25lZCBpbnQgdGFibGVbXSA9CnsKCUVYUEFORAkKfTsKCmludCBtYWluKCkKewoJZm9yIChhdXRvIG4gOiB0YWJsZSkKCQlzdGQ6OmNvdXQgPDwgc3RkOjpoZXggPDwgbiA8PCAnXG4nOwoKCXJldHVybiAwOwp9