note that:
input = Rule[#2, {##}] & @@@ X
can be rewritten as:
input = Table[i[[2]] -> i,{i,X}]
or
input = #[[2]] -> #& /@ X
or
input = MapThread[#2 -> {##} &, Transpose[X]]
or
input = Reap[Do[Sow@Rule[i[[2]], i], {i, X}]][[2, 1]]
or
input = Thread[Rule[X[[All, 2]], X]]
or
.........
The last one should be one of the faster ones I presume...