import math
from math import gcd
def str_to_num(s):
"""将循环节字符串转为整数"""
return int(s) if s else 0
def fraction_to_repeating_decimal(numerator, denominator, is_negative):
"""
将分数(numerator/denominator)转为循环小数的循环节
:param numerator: 分子(正)
:param denominator: 分母(正)
:param is_negative: 是否为负数
:return: (循环节长度, 循环节字符串)
"""
remainder_map = {}
decimal_digits = []
remainder = numerator#分子
idx = 0
# 处理负数:1 - 小数部分(借位)
if is_negative:
# 负数小数部分 = 1 - (numerator/denominator) = (denominator - numerator) / denominator
remainder = denominator - remainder
if remainder == 0:
# 1 - 1 = 0 → 循环节0
return 1, '0'
# 长除法核心逻辑:直到余数为0或余数重复
while remainder != 0 and remainder not in remainder_map:
# 1. 记录当前余数的首次出现位置(索引)
remainder_map[remainder] = idx
# 2. 余数×10:手工除法中“补0继续除”的操作
remainder *= 10
# 3. 计算当前位的小数数字(商的整数部分)
digit = remainder // denominator
# 4. 把当前位数字存入列表
decimal_digits.append(str(digit))
# 5. 更新余数:取整除后的余数,为下一轮除法做准备
remainder = remainder % denominator
# 6. 小数位索引+1,准备计算下一位
idx += 1
# 提取循环节
if remainder in remainder_map:
# 找到循环起始位置,截取循环节
start_idx = remainder_map[remainder]
repeating = decimal_digits[start_idx:]
else:
# 有限小数 → 循环节为0
repeating = ['0']
# 确保循环节非空且从第一位开始
if not repeating:
repeating = ['0']
# 去重循环节(如000→0,1212→12)
# 可选优化:找最小循环节(题目允许输出任意,可省略)
cycle_str = ''.join(repeating)
return len(cycle_str), cycle_str
def main():
import sys
input_lines = sys.stdin.read().splitlines()
# 解析输入
n, m = map(int, input_lines[0].split())
a_cycle = input_lines[1].strip()
b_cycle = input_lines[2].strip()
# 步骤1:循环节转整数
a_num = str_to_num(a_cycle)
b_num = str_to_num(b_cycle)
# 步骤2:计算原始分母(10^n -1 和 10^m -1)
den_a = 10**n - 1
den_b = 10**m - 1
# 步骤3:通分计算分子和分母
numerator = a_num * den_b - b_num * den_a # 分子 = a_num/den_a - b_num/den_b
denominator = den_a * den_b # 分母
# 特殊情况:结果为0
if numerator == 0:
print(1)
print(0)
return
# 步骤4:约分(保留符号)求最小公倍数
common_divisor = gcd(abs(numerator), denominator)
num = numerator // common_divisor
den = denominator // common_divisor
# 步骤5:分离整数部分和小数部分(a-b的整数部分只能是0或-0)
integer_part = num // den
decimal_num = abs(num) % den # 小数部分分子(正)
decimal_den = den # 小数部分分母
# 步骤6:判断是否为负数小数
is_negative = (num < 0) and (decimal_num != 0)
# 步骤7:计算循环节
cycle_len, cycle_str = fraction_to_repeating_decimal(decimal_num, decimal_den, is_negative)
# 输出结果
print(cycle_len)
print(cycle_str)
if __name__ == "__main__":
main()