3. General Algorithm