my own solutions XD