#!/usr/bin/env python3 import sys def solve(): n = int(input()) # 基于理论分析的最优策略: # 对任意目标n,我们可以证明存在一个通用的构造方法 # 关键观察: # 1. digit操作将任何数转换为其数字和(最终会到1-9范围) # 2. 从任何1-9的数,我们都可以用很少操作构造任意目标 # 最优构造策略: if n == 1: # 对于目标1:digit -> 然后想办法变为1 print("digit") sys.stdout.flush() response = int(input()) # 现在尝试各种方法变为1 # 方法1: 如果当前是偶数,除以自身 for d in [2, 3, 4, 5, 6, 7, 8, 9]: print(f"div {d}") sys.stdout.flush() response = int(input()) if response == 1: # 除法成功,现在可能是1或其他数 # 继续尝试到达1 break # 方法2: 用加法调整 for adj in range(-8, 9): if adj != 0: print(f"add {adj}") sys.stdout.flush() response = int(input()) if response == 1: break elif 2 <= n <= 9: # 对于2-9:digit -> 调整到目标 print("digit") sys.stdout.flush() response = int(input()) # 枚举所有可能的当前值,尝试调整到n for current in range(1, 10): diff = n - current print(f"add {diff}") sys.stdout.flush() response = int(input()) if response == 1: break else: # 对于n > 9:使用构造策略 # 策略:digit -> 构造一个因子 -> 乘法得到n print("digit") sys.stdout.flush() response = int(input()) # 寻找n的最小因子(除了1) smallest_factor = n for f in range(2, min(10, n + 1)): if n % f == 0: smallest_factor = f break if smallest_factor < n: # 找到了因子,使用分解策略 quotient = n // smallest_factor # 尝试构造smallest_factor for current in range(1, 10): diff = smallest_factor - current print(f"add {diff}") sys.stdout.flush() response = int(input()) if response == 1: # 成功构造factor,现在乘以quotient print(f"mul {quotient}") sys.stdout.flush() response = int(input()) break else: # n是质数或没有小因子,使用直接加法 for current in range(1, 10): diff = n - current if diff > 0 and diff <= 10**18: print(f"add {diff}") sys.stdout.flush() response = int(input()) if response == 1: break # 输出答案 print("!") sys.stdout.flush() final_response = int(input()) def main(): t = int(input()) for _ in range(t): solve() if __name__ == "__main__": main()