#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 )

#define uintprint3(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;
}