#include <string>
#include <cstdint>
#include <iostream>
#include <type_traits>
#include <unordered_map>

enum class Experience : uint8_t  {
	None = 0,
	Linux = 1 << 0,
	Multithreading = 1 << 1,
	Socket = 1 << 2,
	Highload = 1 << 3,
	CPlusPlus11 = 1 << 4,
	DataStructs = 1 << 5,
	Patterns = 1 << 6,
	Algorithms = 1 << 7,
	All = UINT8_MAX
};

inline constexpr Experience operator|(Experience x, Experience y) {
	return static_cast<Experience>(static_cast<uint8_t>(x) | static_cast<uint8_t>(y));
}

inline constexpr Experience operator&(Experience x, Experience y) {
	return static_cast<Experience>(static_cast<uint8_t>(x) & static_cast<uint8_t>(y));
}

inline constexpr bool operator==(Experience x, Experience y) {
	return static_cast<uint8_t>(x) == static_cast<uint8_t>(y);
}

template<Experience Mask>
struct Applicant {
	static const bool value = ((Mask & Experience::All) == Experience::All);
};

template<typename T>
class Suitability {
	template<typename U>
	static int8_t f(typename std::enable_if<U::value, bool>::type*);
	
	template<typename U>
	static int32_t f(...);
	
public:
	static const bool value = (sizeof(f<T>(0)) == sizeof(int8_t));
};

int main(int argc, const char * argv[]) {
	std::unordered_map<uint8_t, std::string> result = { { 0, "Unsuitable" }, { 1, "Suitable" } };
	static constexpr Experience experience = Experience::None; // specify your skills here
	std::cout << result[Suitability<Applicant<experience>>::value] << std::endl;
    return 0;
}