procedure mdr(n) local i until *n = 1 do { i := 1 every i *:= !n n := i } return n end