gecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgec
gecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgec
gecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgecgec











