Tricky C code involving the use of unary increment/decrement operators

I found this interesting piece of code online (can't remember where, it was on some Facebook group). The output is 28 but I don't get it. The unary operators have higher precedence so they are executed first. Then the local copies of variable 'a' are added.

#include <stdio.h>

int main()
{
    int a = 5;

    a = (++a) + (a--) + (++a) + (a++);
    printf("%d", a); // a = 28
    getchar();

    return 0;
}