Capture The Flag
题号:NC26109
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
Special Judge, 64bit IO Format: %lld

题目描述

🏆选手t觉得ACM太无聊了,没有挑战性——因为题目都是人出的,只要是能出出来的题都是可做题。于是他决定转行去隔壁打CTF。

显然,CTF对于🏆选手t来说也没有任何挑战性——因为题目都是人出的,只要是能出出来的题都是可做题。不过,CTF中有一类题,虽然可做,但是耗费时间。

比如,给你一个抠掉了n个字符的明文(由小写字母和数字构成),告诉你这串明文用md5或其他基于哈希方法加密后的密文,要你还原出完整的明文,于是你需要写一个运算次的程序暴力枚举所有的可能性。

假设电脑一秒大概可以运行10000000次,那么如果明文被抠去了7个字符,那就需要运行次,大概需要秒,也就是两个多小时。🏆选手t的时间宝贵,他当然是不屑于做这种题的。

现在,有一道CTF题,经过🏆选手t优秀的代码审计后,翻译如下:它在代码中内嵌了一个字符串s。你可以传入一个字符串参数t,如果s=t,代码会直接停止执行。当hash(s)=hash(t),代码会抛出一个{flag},否则就什么也不做。

其中,字符串的起始下标为0,len(x)代表字符串x的长度,x_i代表字符串x第i位字符的ASCII码的值。mod代表求余数(取模)运算。

🏆选手t审计完代码后,理所当然地将后续的计算抛给了你。现在,他会给你hash函数用到的参数p、m,以及代码中的字符串s。为了得到🏆选手t想要的{flag},你需要尽快计算出需要的字符串t。

所有输入输出字符串内的字符ASCII码取值范围为[33,126]。

输入描述:

输入共两行,第一行输入两个正整数

第二行输入一个字符串s,长度

输出描述:

输出共一行,一个长度的与s不相同的非空字符串t,使得hash(s)=hash(t)

示例1

输入

复制
233 19260817
trxnb

输出

复制
giuliuxxpi

备注:

样例的hash值为0xA6EA32(10938930)