1
- #include < bits/stdc++.h>
1
+ #include < bits/stdc++.h>
2
+
2
3
using namespace std ;
3
- #define FOR (i,a,b ) for (int i = (a); i <= (b); ++i)
4
- #define FORD (i,a,b ) for (int i = (b); i >= (a); --i)
5
- #define TRAV (x,T ) for (auto & x: (T))
6
- #define ALL (T ) T.begin(), T.end()
7
- #define TAB (T,a,b ) (T)+a, (T)+((b)+1 )
8
- #define VAR (x ) #x<<" = " <<x<<" "
9
- #define SZ (x ) (int )(x).size()
10
- #define Nwd __gcd
11
- #define pb push_back
12
- #define st first
13
- #define nd second
14
- #define lc (v<<1 )
15
- #define rc (v<<1 |1 )
16
- typedef long long ll;
17
- typedef long double ld;
18
- typedef pair<int , int > pii;
19
- typedef pair<int , ll> pil;
20
- typedef pair<ll, int > pli;
21
- typedef pair<ll, ll> pll;
22
- typedef vector<int > vi;
23
- #define deb if (0 )
24
-
25
- struct Modulo {
26
- ll MOD;
27
- Modulo (ll mod) {
28
- MOD = mod;
29
- }
30
- ll Moduluj (const ll &a) {
31
- if (a < MOD) return a;
32
- return a % MOD;
33
- }
34
- ll Power (ll a, ll b) {
35
- if (b == 0 ) return 1 ;
36
- ll ans = Power (a, b / 2 );
37
- ans = Moduluj (ans * ans);
38
- if (b & 1 ) return Moduluj (ans * a);
39
- return ans;
40
- }
41
- ll Dodaj (ll a, ll b) {
42
- a = Moduluj (a), b = Moduluj (b);
43
- if (a + b >= MOD) return a + b - MOD;
44
- else return a + b;
45
- }
46
- ll Odejmij (ll a, ll b) {
47
- a = Moduluj (a), b = Moduluj (b);
48
- if (a - b < 0 ) return a - b + MOD;
49
- else return a - b;
50
- }
51
- ll Mnoz (ll a, ll b) {
52
- a = Moduluj (a), b = Moduluj (b);
53
- return Moduluj (a * b);
54
- }
55
- ll Dziel (ll a, ll b) {
56
- a = Moduluj (a), b = Moduluj (b);
57
- return Moduluj (a * Power (b, MOD - 2 ));
58
- }
59
- } Mod(1e9 + 7 );
4
+
5
+ struct ModuloStruct {
6
+ long long MOD;
7
+
8
+ ModuloStruct (long long mod) { MOD = mod; }
9
+
10
+ long long Modulo (const long long &a) {
11
+ if (a < MOD)
12
+ return a;
13
+ return a % MOD;
14
+ }
15
+
16
+ long long Power (long long a, long long b) {
17
+ if (b == 0 )
18
+ return 1 ;
19
+ long long ans = Power (a, b / 2 );
20
+ ans = Modulo (ans * ans);
21
+ if (b & 1 )
22
+ return Modulo (ans * a);
23
+ return ans;
24
+ }
25
+
26
+ long long Add (long long a, long long b) {
27
+ a = Modulo (a), b = Modulo (b);
28
+ if (a + b >= MOD)
29
+ return a + b - MOD;
30
+ else
31
+ return a + b;
32
+ }
33
+
34
+ long long Subtract (long long a, long long b) {
35
+ a = Modulo (a), b = Modulo (b);
36
+ if (a - b < 0 )
37
+ return a - b + MOD;
38
+ else
39
+ return a - b;
40
+ }
41
+
42
+ long long Multiply (long long a, long long b) {
43
+ a = Modulo (a), b = Modulo (b);
44
+ return Modulo (a * b);
45
+ }
46
+
47
+ long long Divide (long long a, long long b) {
48
+ a = Modulo (a), b = Modulo (b);
49
+ return Modulo (a * Power (b, MOD - 2 ));
50
+ }
51
+ } Mod(1e9 + 7 );
0 commit comments