#include #include #include #include #include using std::set; using std::string; using std::ranges::next_permutation; using std::ranges::reverse; using std::ranges::sort; class Solution { public: string smallestPalindrome(string s, int k) { string half = s.substr(0, s.size() / 2); sort(half); set permutations; do { permutations.insert(half); } while (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 string(); } auto it = permutations.begin(); advance(it, k - 1); string mirroredHalf = *it; reverse(mirroredHalf); return *it + mirroredHalf; } };