#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[0] >  a[1]
             a[0], a[1], a[2],  // a[1] >  a[2] //
             a[2], a[1], a[0]   //              //
           );  return;         }//              //
//------------------------------//              //
                                                //
else if (a[0] > a[2]) //--------//              //
{ REORDER3 (                    // a[0] >  a[1] //
                                // a[1] <= a[2] //
            a[0], a[1], a[2],   // a[0] >  a[2] //
            a[1], a[2], a[0]    //              //
           );  return;         }//              //
//------------------------------//              //
                                                //
else //-------------------------//              //
{ REORDER3 (                    // a[0] >  a[1] //
                                // a[1] <= a[2] //
             a[0], a[1], a[2],  // a[0] <= a[2] //
             a[1], a[0], a[2]   //              //
           );  return;         }//              //
//------------------------------//              //
                                                //
//----------------------------------------------//

else //-----------------------------------------//
                                                //
if (a[1] <= a[2]) //------------//              //
/*REORDER3 (                    //              //
                                // a[0] <= a[1] // a[0] <= a[1]
             a[0], a[1], a[2],  // a[1] <= a[2] //
             a[0], a[1], a[2],  //              //
           );*/ return;         //              //
//------------------------------//              //
                                                //
else if (a[0] <= a[2]) //-------//              //
{ REORDER3 (                    // a[0] <= a[1] //
                                // a[1] >  a[2] //
             a[0], a[1], a[2],  // a[0] <= a[2] //
             a[0], a[2], a[1]   //              //
           );  return;         }//              //
//------------------------------//              //
                                                //
else //-------------------------//              //
{ REORDER3 (                    // a[0] <= a[1] //
                                // a[1] >  a[2] //
             a[0], a[1], a[2],  // a[0] >  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;
}
