// ── TYPE PROMOTION (Higher Data Type Wins) ───────────────────────
charintlonglong longfloatdouble
 
cout << 'c' + 1;                         // 100 ('c'=99)
cout << 7 / 2;                           // 3
cout << 7 / 2.0;                         // 3.5
 
// ⚠️ If one operand is double → whole calculation becomes double
 
 
// ── CALCULATE FIRST → STORE LATER ────────────────────────────────
double a = 7 / 2;                        // 3.0
double a = 7 / 2.0;                      // 3.5
int a = 7 / 2.0;                         // 3
 
// Rule:
// expression evaluated first
// then stored in variable type
 
 
// ── INTEGER RANGES (CP QUICK VALUES) ─────────────────────────────
int             → ±10^9
long            → ±10^12
long long       → ±10^18
 
long long x;                             // preferred in CP
 
int x = 1e4 // 10^4
 
// ── OVERFLOW ⚠️ ──────────────────────────────────────────────────
int a = 100000;
int b = 100000;
int c = a * b;                           // overflow 10^10
 
// Fix:
long long c = (long long)a * b;
 
int mx = INT_MAX;
cout << mx + 1;                          // overflow
 
 
// ── PRECISION ────────────────────────────────────────────────────
double ans = (double)a / b;
cout << 5 / 2;                           // 2
cout << 5.0 / 2;                         // 2.5
 
 
// ── MODULAR ARITHMETIC ───────────────────────────────────────────
const int MOD = 1e9 + 7;    // used in cp -> Why? 1. Large enough 2. It's Prime -> don't loose information
 
// Addition
(a + b) % MOD
((a % MOD) + (b % MOD)) % MOD
 
// Multiplication
(a * b) % MOD
((a % MOD) * (b % MOD)) % MOD
 
// Subtraction
(a - b) % MOD
((a % MOD) - (b % MOD) + MOD) % MOD