#define Swap(X,Y) do{ __typeof__ (X) _T = X; X = Y; Y = _T; }while(0)