#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;
}