Problem solving abstraction and design using C++ - Friedman F. L.