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

typedef union {
  uint8_t integral;
  struct {unsigned char a3: 2, a2: 2, a1: 2, a0: 2;} at;
} indices;

void sort4(uint32_t a[static 4])
{
  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 char b2[] = "LKH><;@ABCFBORMAND(-4-$-)&&&&&&&///////\x12\x12\x13\x12\x12\x0f\x0f\x0f\x0f\x0f-1-1-!!!!\x1a\n\x19\r\x19\t";
  indices index = {b2[bits]*3};
  uint32_t out[4] = {a[index.at.a0], a[index.at.a1], a[index.at.a2], a[index.at.a3]};
  memcpy(a, out, 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;
}
