# Team Reference Materials
## Debug List
* Check Sample Input/Output **manually**
* Check integer overflow (no need in python)
* Check I/O format
* floating point -> int: unwanted ".0"?
* case-sensitive? ("YES" / "Yes" / "yes")
* Check if DFS too deep? (stack overflow)
* Check boundary and edge cases
* Missing Constraints?
* 1 second is roughly $10^8$ operations.
* $O(n)$ for $n\approx 2\times 10^6$
* $O(n\log n)$ for $n\approx 3\times 10^5$
* $O(n^2)$ for $n\approx 5000$
* $O(n^3)$ for $n\approx 500$
* $O(2^n)$ for $n\le 25$.
## Common Macros
```python3
# Faster input()
import sys
input = sys.stdin.readline
```
## Common Algorithms and Data Structures
### Union-Find Data Structure
```python3=
class UnionFind:
""" Elements have labels 1~n.
Tested on https://open.kattis.com/problems/unionfind
"""
def __init__(self, n):
self.n = n
self.group = [i for i in range(0, n+1)]
def find(self, x):
path = [x]
while self.group[path[-1]] != path[-1]:
path.append(self.group[path[-1]])
for elem in path:
self.group[elem] = path[-1]
return path[-1]
def union(self, x, y):
self.group[self.find(x)] = self.find(y)
```
### Binary Indexed Tree (Fenwick Tree)
```python3=
class FenwickTree:
""" Support index range 1 to N.
Tested on https://open.kattis.com/problems/fenwick
"""
def __init__(self, _N):
self.N = _N + 1
self.A = [0] * self.N
def add(self, idx, val):
# idx must be 1-index based.
while idx < self.N:
self.A[idx] += val
idx += (idx & -idx)
def prefix_sum(self, idx):
ret = 0
while idx > 0:
ret += self.A[idx]
idx -= (idx & -idx)
return ret
```
## Math Formulas
### Trigonometric Equations
* $\cos(\alpha+\beta)= \cos\alpha\cos\beta -\sin\alpha\sin\beta$
* $\sin(\alpha+\beta)= \cos\alpha\sin\beta + \sin\alpha\cos\beta$
### Area of a Triangle
* Given coordinates: $\frac{1}{2}|x_Ay_B+x_By_C+x_Cy_A-x_By_A-x_Cy_B-x_Ay_C|$.
* Given side lengths: $s=\frac{a+b+c}{2}$; $\triangle ABC=\sqrt{s(s-a)(s-b)(s-c)}.$
### Area of a Polygon
Here $(x_{n+1}, y_{n+1})$ is defined to be $(x_1, y_1)$:
$$ \frac12\left| \sum_{i=1}^n (x_iy_{i+1}-x_{i+1}y_i) \right| $$