### Overview
Both can be solved with this solution. The servers sends a timestamp and a few random numbers. The goal is to send back the next number in the sequence.
### Idea
The sequence starts with the very first number after a random seed is set, so we can narrow the search space to seeds that start with it. After getting a few candidates, it is possible to check if the other numbers match by using the provided algorithm. The server doesn't have rate limiting, so we can check just a subset of random seeds and request another batch of numbers if none fit.
### Solution
Step 1: Dump a few pairs of (seed, first_random_number) in a file
```"
d = {}
i = 0
with open('data.csv') as csvfile:
    spamreader = csv.reader(csvfile)
    for row in spamreader:        i+=1        # check if in dict        if i == 20796091:            break        if row[0] in d:            d[row[0]].append(row[1])        else:            d[row[0]] = [row[1]]            z = row[0]
print(f"Loaded {i} lines")
while True:    r = requests.post(url)    data = r.text.split("\\n")
    data[0] # time    leak = data[1]
    if leak in d:        number = os.popen(f"php a.php {len(d[leak])} {' '.join(d[leak])} {' '.join(data[:-2])}").read()
        print(f"Number: {number}")
        cookies = r.cookies
        r = requests.post(url+"submit", data={"next": number}, cookies=cookies)        print(r.text)        if "ENO" in r.text:            exit()
```
## Flags
`ENO{M4sT3r_0f_R4nd0n0m1c5}` - randrevenge`ENO{PHD_1N_TrU3_R4nd0n0m1c5_516189}` - randrevengerevenge