text: #pragma once
  #include <set>
  #include <string>
  #include <unordered_map>
  #include <vector>
  
  class Puzzle08
  {
  public:
  	Puzzle08();
  	void PrintSolutionA();
  	void PrintSolutionB();
  
  private:
  	const std::vector<std::string> Input;
  
  	int CountKnownDigits();
  	int SumAllOutputs();
  
  	void PruneUsingPatternSignalLength(
  		std::unordered_map<char, std::set<char>>& ScrambledSegmentsToPossibleSegments,
  		std::vector<std::string> ScrambledPatternSignals);
  
  	void PruneUsingTotalSegmentReferences(
  		std::unordered_map<char, std::set<char>>& ScrambledSegmentsToPossibleSegments,
  		std::vector<std::string> ScrambledPatternSignals);
  
  	void PruneUsingKnownSegments(std::unordered_map<char, std::set<char>>& ScrambledSegmentsToPossibleSegments);
  
  	std::set<char> Intersection(const std::set<char>& Left, const std::set<char>& Right);
  };
  
  