import random n = 10 flag_len = 20 state = [random.randint(0, (1 << n) - 1) for i in range(n)] k = 0 def update_state(): for i in range(n): state.append(state[0]) for j in range(1, n): state[j] ^= ((state[0] >> j) & 1) << i state.pop(0) def get_random(): global k if(k == n): k = 0 update_state() k += 1 return state[k - 1] flag='ctf{' + (''.join([chr(get_random() % 26 + ord('a')) for i in range(flag_len)])) + '}' print(flag) update_state() print(state)