def find_cycle(m0, D_mod, B): seen = {} path = [] current = m0 step = 0 while current not in seen: seen[current] = step path.append(current) base = (current + D_mod) % B exponent = current if base == 0 and exponent == 0: next_m = 1 % B else: next_m = pow(base, exponent, B) current = next_m step += 1 cycle_start = seen[current] cycle_length = step - cycle_start # Generate the loop elements loop = [] if cycle_length > 0: loop.append(current) for _ in range(cycle_length - 1): base = (loop[-1] + D_mod) % B exponent = loop[-1] if base == 0 and exponent == 0: next_m = 1 % B else: next_m = pow(base, exponent, B) loop.append(next_m) return path, cycle_start, cycle_length, loop # Read input M = int(input()) D = int(input()) N = int(input()) B = int(input()) D_mod = D % B initial_m = M % B path, cycle_start, cycle_length, loop = find_cycle(initial_m, D_mod, B) if N < len(path): final_m = path[N] else: remaining = N - cycle_start index = remaining % cycle_length final_m = loop[index] # Convert to B-based last digit if final_m < 10: print(final_m) else: print('A')