#include <iostream>

using namespace std;

class Modulo {
    friend Modulo operator+(Modulo&, Modulo&);
public:
    Modulo(int n = 0);

    static const int modulus;

private:
    int number;     // WARNING! can be abused, how to fix it?
};

const int Modulo::modulus = 7;

Modulo::Modulo(int n) {
    this->number = n % this->modulus;
}

Modulo operator+(Modulo &m, Modulo &n) {
    return Modulo(m.number + n.number);
}

int main() {
    Modulo m(5), n(6), k;
    Modulo x = Modulo(9);

    k = m + n;
//    cout << m.number << " + " << n.number
//         << " (mod " << Modulo::modulus << ") = " << k.number << endl;

    k = operator+(m, n);
//    cout << m.number << " + " << n.number
//         << " (mod " << Modulo::modulus << ") = " << k.number << endl;
    
    return 0;    
}
