#include <stdio.h>

#define REORDER3(b1, b2, b3, a1, a2, a3 )   \
{                                           \
  typeof(a1) _tmp[] = {a1, a2, a3};         \
  b1 = _tmp[0]; b2 = _tmp[1]; b3 = _tmp[2]; \
} while ( 0 )

void uintprint3(unsigned *a)
{
    printf("%u %u %u\n", a[0], a[1], a[2]);
}


void sort3( unsigned int a[3] )
{
    if (a[0] > a[1])
    {
        if (a[1] > a[2])
        {
            REORDER3 (
                a[0], a[1], a[2],
                a[2], a[1], a[0]);
            return;
        }
        else
        {
            if (a[0] > a[2])
            {
                REORDER3 (
                    a[0], a[1], a[2],
                    a[1], a[2], a[0]);
                return;
            }
            else
            {
                REORDER3 (
                    a[0], a[1], a[2],
                    a[1], a[0], a[2]);
                return;
            }
        }
    }
    else
    {
        if (a[1] <= a[2])
        {
            return; //NO REORDER
        }
        else
        {
            if (a[0] <= a[2])
            {
                REORDER3 (
                    a[0], a[1], a[2],
                    a[0], a[2], a[1] );
                return;
            }
            else
            {
                REORDER3 (
                    a[0], a[1], a[2],
                    a[2], a[0], a[1] );
                return;
            }
        }
    }
}

int main(void)
{
    unsigned int a[] = {0, 1, 2};
    unsigned int b[] = {0, 2, 1};
    unsigned int c[] = {1, 2, 0};
    unsigned int d[] = {1, 0, 2};
    unsigned int e[] = {2, 0, 1};
    unsigned int f[] = {2, 1, 0};
    sort3(a); sort3(b); sort3(c); sort3(d); sort3(e); sort3(f);
    
    uintprint3(a);
    uintprint3(b);
    uintprint3(c);
    uintprint3(d);
    uintprint3(e);
    uintprint3(f);
    return 0;
}