CF490C Hacking Cypher

题目描述

Polycarpus 参与了一项破解新型安全通讯软件的比赛。他几乎就要获胜了。 在仔细研究了交互协议后,Polycarpus 得出结论:如果能恰当地将该应用的公钥切分为两部分,就可以获得密钥。这个公钥是一个很长的整数,可能包含多达一百万位数字! Polycarpus 需要找到一种方法,将公钥切分为两个非空部分,使得左边的第一部分作为一个独立的数字能被 $a$ 整除,右边的第二部分作为一个独立的数字能被 $b$ 整除。两部分都必须是正整数,且不得有前导零。Polycarpus 已经知道 $a$ 和 $b$ 的数值。 请你帮助 Polycarpus,找到一种满足上述条件的切分方法。

输入格式

第一行输入为通讯软件的公钥,一个没有前导零的整数,长度在 $1$ 到 $10^{6}$ 位之间。 第二行输入为两个用空格隔开的正整数 $a,b$,满足 $1 \leq a, b \leq 10^{8}$。

输出格式

若存在满足条件的切分方法,第一行输出 "YES"(不带引号)。接下来两行分别输出切分后的左、右两部分,这两部分连接起来应当与原来的公钥完全一致。左部分需能被 $a$ 整除,右部分需能被 $b$ 整除,两部分都必须是正整数且没有前导零。如果存在多个答案,输出任意一种即可。 如果不存在这样的切分方法,输出一行 "NO"(不带引号)。

说明/提示

由 ChatGPT 5 翻译