If you need a structure for modular numbers, here is my: ~~~~~ const int MOD = 1e9 + 7; //Or your one
struct Number { int value; Number (int value) { this->value = (MOD + value) % MOD; }
friend bool operator< (const Number& a, const Number& b) {
return a.value < b.value;
}
friend bool operator== (const Number& a, const Number& b) {
return a.value == b.value;
}
friend Number operator+ (const Number& a, const Number& b) {
return Number ((a.value + b.value) % MOD);
}
friend Number operator- (const Number& a, const Number& b) {
return Number ((a.value - b.value + MOD) % MOD);
}
friend Number operator* (const Number& a, const Number& b) {
return Number (int(1LL * a.value * b.value % MOD));
}
friend Number operator^ (const Number& a, const Number& k) {
if (k == 0) return 1;
if (k == 1) return a;
Number res = a ^ Number (k.value/2);
return res * res * Number(k.value%2);
}
Number (int a, int k) {
if (k == 0) this->value = 1;
else if (k == 1) this->value = a;
else {
Number res = Number (a, k/2);
res = res * res * Number(a, k%2);
this->value = res.value;
}
}
friend Number operator/ (const Number& a, const Number& b) {
return a * Number(b.value, MOD - 2);
}
friend ostream& operator<<(ostream& os, const Number& a) {
os << a.value;
return os;
}}; ~~~~~



