#include #include #include #include #include class Solution { public: std::string smallestPalindrome(std::string s, int k) { std::string half = s.substr(0, s.size() / 2); std::ranges::sort(half); std::set permutations; do { permutations.insert(half); } while (std::ranges::next_permutation(half).found); if (permutations.size() > std::numeric_limits::max()) { throw std::overflow_error("Number of permutations exceeds int limit"); } int size = static_cast(permutations.size()); if (k > size) { return std::string(); } auto it = permutations.begin(); advance(it, k - 1); std::string mirroredHalf = *it; std::ranges::reverse(mirroredHalf); return *it + mirroredHalf; } };