#include <stdio.h>
#include <inttypes.h>
#include <string.h>

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

void sort4(uint32_t a[static 4])
{
  uint64_t mask = 0x6C6361E12D2724E4;
  uint8_t bits = ((a[0] <= a[1])     ) | ((a[1] <= a[2]) << 1) | ((a[2] <= a[3]) << 2)
               | ((a[0] <= a[2]) << 3) | ((a[1] <= a[3]) << 4) | ((a[0] <= a[3]) << 5);
  static const uint8_t b[] =
  {
    [0b000000] = 11,
    [0b000001] = 32,
    [0b000010] = 42,
    [0b000100] = 22,
    [0b000101] = 54,
    [0b001001] = 10,
    [0b001010] = 20,
    [0b001011] = 47,
    [0b010010] = 34,
    [0b010100] = 3,
    [0b010110] = 43,
    [0b011010] = 1,
    [0b100101] = 46,
    [0b101001] = 2,
    [0b101011] = 44,
    [0b101101] = 24,
    [0b110100] = 6,
    [0b110101] = 38,
    [0b110110] = 48,
    [0b111010] = 4,
    [0b111011] = 36,
    [0b111101] = 5,
    [0b111110] = 26,
    [0b111111] = 45,
  };
  mask >>= b[bits];
  uint32_t tmp[4] = {a[(mask>>6)&0b11], a[(mask>>4)&0b11], a[(mask>>2)&0b11], a[(mask)&0b11]};
  memcpy(a, tmp, 4*sizeof(uint32_t));
}
 
int main(void)
{
  uint32_t a[] = {0, 1, 2, 3};
  uint32_t b[] = {0, 1, 3, 2};
  uint32_t c[] = {0, 2, 1, 3};
  uint32_t d[] = {0, 2, 3, 1};
  uint32_t e[] = {0, 3, 1, 2};
  uint32_t f[] = {0, 3, 2, 1};
  uint32_t g[] = {1, 0, 2, 3};
  uint32_t h[] = {1, 0, 3, 2};
  uint32_t i[] = {1, 2, 0, 3};
  uint32_t j[] = {1, 2, 3, 0};
  uint32_t k[] = {1, 3, 0, 2};
  uint32_t l[] = {1, 3, 2, 0};
  uint32_t m[] = {2, 0, 1, 3};
  uint32_t n[] = {2, 0, 3, 1};
  uint32_t o[] = {2, 1, 0, 3};
  uint32_t p[] = {2, 1, 3, 0};
  uint32_t q[] = {2, 3, 0, 1};
  uint32_t r[] = {2, 3, 1, 0};
  uint32_t s[] = {3, 0, 1, 2};
  uint32_t t[] = {3, 0, 2, 1};
  uint32_t u[] = {3, 1, 0, 2};
  uint32_t v[] = {3, 1, 2, 0};
  uint32_t w[] = {3, 2, 0, 1};
  uint32_t x[] = {3, 2, 1, 0};

  sort4(a); sort4(b); sort4(c); sort4(d); sort4(e); sort4(f);
  sort4(g); sort4(h); sort4(i); sort4(j); sort4(k); sort4(l);
  sort4(m); sort4(n); sort4(o); sort4(p); sort4(q); sort4(r);
  sort4(s); sort4(t); sort4(u); sort4(v); sort4(w); sort4(x); 

  uintprint4(a); uintprint4(b); uintprint4(c); uintprint4(d); uintprint4(e); uintprint4(f);
  uintprint4(g); uintprint4(h); uintprint4(i); uintprint4(j); uintprint4(k); uintprint4(l);
  uintprint4(m); uintprint4(n); uintprint4(o); uintprint4(p); uintprint4(q); uintprint4(r);
  uintprint4(s); uintprint4(t); uintprint4(u); uintprint4(v); uintprint4(w); uintprint4(x); 

  return 0;
}