gecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgec
gecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgec
gecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgec