- #include <stdio.h> 
-   
- template <size_t N> 
- struct StrN 
- { 
-     char str[N]; 
-   
-     static void Swap(char *p0, char *p1) 
-     { 
-         StrN &s0 = *(StrN *)p0; 
-         StrN &s1 = *(StrN *)p1; 
-         StrN tmp = s0; 
-         s0 = s1; 
-         s1 = tmp; 
-     } 
- }; 
-   
-   
- #define SWAP10(STR, IDX0, IDX1) StrN<10>::Swap(&STR[IDX0 * 10], &STR[IDX1 * 10]) 
-   
-   
- int main() 
- { 
-   
-     char str[21] = {"abcdefghijABCDEFGHIJ"}; 
-   
-     printf("Before swapping :\n%s\n\n", str); 
-   
-     SWAP10(str, 0, 1); 
-   
-     printf("After swapping :\n%s\n\n", str); 
-   
-     return 0; 
- } 
				I2luY2x1ZGUgPHN0ZGlvLmg+Cgp0ZW1wbGF0ZSA8c2l6ZV90IE4+CnN0cnVjdCBTdHJOCnsKICAgIGNoYXIgc3RyW05dOwogICAgCiAgICBzdGF0aWMgdm9pZCBTd2FwKGNoYXIgKnAwLCBjaGFyICpwMSkKICAgIHsKICAgICAgICBTdHJOICZzMCA9ICooU3RyTiAqKXAwOwogICAgICAgIFN0ck4gJnMxID0gKihTdHJOICopcDE7CiAgICAgICAgU3RyTiB0bXAgPSBzMDsKICAgICAgICBzMCA9IHMxOwogICAgICAgIHMxID0gdG1wOwogICAgfQp9OwoKCiNkZWZpbmUgU1dBUDEwKFNUUiwgSURYMCwgSURYMSkgU3RyTjwxMD46OlN3YXAoJlNUUltJRFgwICogMTBdLCAmU1RSW0lEWDEgKiAxMF0pCgoKaW50IG1haW4oKQp7CgogICAgY2hhciBzdHJbMjFdID0geyJhYmNkZWZnaGlqQUJDREVGR0hJSiJ9OwoKICAgIHByaW50ZigiQmVmb3JlIHN3YXBwaW5nIDpcbiVzXG5cbiIsIHN0cik7CgogICAgU1dBUDEwKHN0ciwgMCwgMSk7CgogICAgcHJpbnRmKCJBZnRlciBzd2FwcGluZyA6XG4lc1xuXG4iLCBzdHIpOwogICAgCiAgICByZXR1cm4gMDsKfQ==