// Un paso de trabajo. Cada llamada a step() cuesta lo mismo: Θ(1).
#ifndef WORK_H
#define WORK_H

#include <cstdint>

class Work {
public:
    void step() {
        state_ ^= state_ >> 7;
        state_ *= 0x9E3779B97F4A7C15ULL;
        steps_++;
    }

    std::uint64_t state() const { return state_; }
    long long steps() const { return steps_; }

private:
    std::uint64_t state_ = 1;
    long long steps_ = 0;
};

#endif
