improved password generation