This documentation is automatically generated by online-judge-tools/verification-helper
#pragma once
#include <variant>
#include "int_alias.cpp"
class SubsetScanner {
struct Iter {
u64 s, t;
explicit constexpr Iter(const u64 s, const u64 t) noexcept : s(s), t(t) {}
constexpr bool operator!=(std::monostate) const noexcept { return ~t != 0; }
constexpr void operator++() noexcept { t -= 1; }
constexpr u64 operator*() noexcept { return t &= s; }
};
u64 s;
public:
explicit constexpr SubsetScanner(u64 s) noexcept : s(s) {}
constexpr Iter begin() const noexcept { return Iter(s, s); }
constexpr std::monostate end() const noexcept { return {}; }
};
constexpr SubsetScanner subsets(const u64 set) noexcept { return SubsetScanner(set); }
#line 2 "utility/subsets.cpp"
#include <variant>
#line 2 "utility/int_alias.cpp"
#include <cstdint>
using i32 = std::int32_t;
using u32 = std::uint32_t;
using i64 = std::int64_t;
using u64 = std::uint64_t;
using i128 = __int128_t;
using u128 = __uint128_t;
#line 4 "utility/subsets.cpp"
class SubsetScanner {
struct Iter {
u64 s, t;
explicit constexpr Iter(const u64 s, const u64 t) noexcept : s(s), t(t) {}
constexpr bool operator!=(std::monostate) const noexcept { return ~t != 0; }
constexpr void operator++() noexcept { t -= 1; }
constexpr u64 operator*() noexcept { return t &= s; }
};
u64 s;
public:
explicit constexpr SubsetScanner(u64 s) noexcept : s(s) {}
constexpr Iter begin() const noexcept { return Iter(s, s); }
constexpr std::monostate end() const noexcept { return {}; }
};
constexpr SubsetScanner subsets(const u64 set) noexcept { return SubsetScanner(set); }