Hidden Code
Time limit2sMemory limit512 MB
Given plaintext/ciphertext pairs encrypted with a common repeating key, recover the shortest key or report that none works.
- Level
Medium6 of 10
- Topics
- String, Math, Implementation, Brute force
- Solved
- No attempts yet
Problem
It's time to put your hacking skills to the test! You've been called upon to help crack enemy codes in the current war on... something or another. Anyway, the point is that you have discovered the encryption technique used by the enemy; it is quite simple, and proceeds as follows. Note that all strings contain only uppercase letters of the alphabet.
- We are given a key and a plaintext , which is encrypted character-by-character to produce a ciphertext of the same length.
- If is the length of the key , then the first characters of are obtained by adding the first characters of to the characters of , where adding two letters means interpreting them as numbers (, , and so on) and taking the sum modulo 26. That is, for . If , then the extra characters in are ignored.
- The remaining characters of , i.e. for , are encrypted using the previous ciphertext characters by for .
As an example, consider the encryption of the string "STANFORD" using the key "ACM":
STA NFORD
+ ACM SVMFA
----------
SVM FAAWD
Knowing this, you are well on your way to being able to read the enemy's communications. Luckily, you also have several pairs of plaintexts and ciphertexts that your team recovered, all of which are known to be encrypted with the same key. Help find the key that the enemy is using. Because the key is uniquely determined by the longest recovered plaintext, the shortest valid key is unique.
Input
The input consists of multiple test cases. Each test case begins with a line containing a single integer (), the number of plaintext/ciphertext pairs you will receive. Each of the next lines contains two strings and , the plaintext and the ciphertext respectively. and contain only uppercase letters (A-Z) and have the same length (at most 100 characters). The input terminates with a line containing , which is not processed.
Output
For each test case, print a single line containing the shortest possible key, or Impossible if no key could have produced all of the given encryptions.