|  | 
	
		
		
			
			
Titkosítás
Amint az ajtó kitárult, kommandós osztagként hatoltatok be a 
terroristák titkos főhadiszállására. Ám ott megdöbbenve vettétek észre, 
hogy néhány pizzás dobozon és üres üdítőitalos flakonon (hey...legalább 
50 forint, szóval már megérte!) kívül semmi nincs ott. A terroristák 
valószínűleg már napokkal korábban elhagyták a helyszínt és igyekeztek 
minden nyomot eltűntetni maguk után ami az esetleges új rejtekhelyükre 
utalna. Azonban az egyik pizzás doboz alján észrevettetek valamilyen 
furcsa titkosírást, mely talán segíthet a nyomozásban. A ti feladatotok 
lesz feltörni azt! 
 Input
	A bemenet két, sor vége karakterrel lezárt sorból áll:
	 
		Az első sor egy tetszőlegesen hosszú string, mely a titkosított szöveget 
		tartalmazza. A string az angol ABC kis- és nagybetűiből, 
		illetve a szóköz karakterből áll (összesen 53 lehetséges 
		karakter).A második sor a már említett 53 karakterből tartalmaz 4-et, 
		szóközzel elválasztva. Output
A kimenet egyetlen sor, mely a titkosítatlan szöveget adja meg.
 Szabályok
	A titkosított (input) szöveg elkészítése az alábbiak szerint zajlott:
     
		Példa:Az 53 lehetséges karaktert az 
		a=0,b=1,...,z=25,A=26,B=27,...,Z=51," "=52 módon számozzuk.Az inputként megadott titkosított szöveg minden karaktere úgy 
		készült, hogy az ismeretlen üzenet minden karakterét (számként) 
		megszoroztuk ugyanazzal a K 
		számmal, majd hozzáadtuk ugyanazt az 
		L számot. Ezt követően az így kapott 
		n számot modulo 53 redukáltuk (programozásban: 
		n%53)   ha K=3 és L=4, úgy az x=23 számból 3*23 + 4 
    = 73%53 = 20 = "u" lesz. 
    Az input első sorában lévő titkosított szövegből visszakapni az eredeti 
    szöveget (ami a szükséges output) az alábbiak szerint tudjuk:
     
		Példa:A titkosított (input) szöveg minden karakteréből (számként) 
		levonjuk L értékét.Az így kapott számot "osztjuk" K-val. 
		Azonban mivel minden művelet egész számokkal zajlik 0-tól 
		52-ig, így az osztás nem a hagyományos osztás. A "moduláris 
		osztás" úgy zajlik, hogy megkeressük azt a K' 
		számot, melyre teljesül az, hogy (K*K')%53 = 1. Ezt követően a 
		K-val való osztás ekvivalens az ezzel a K' számmal való 
		szorzással, redukálva 
		modulo 53 (programozásban %53).  a fenti példa esetén "u=20"-ból úgy kapjuk 
    vissza a kiindulási "x"-et, hogy:
     
		"u" - L = 20-L = 16K' = 18, mert (K*K')%53 = (3*18)%53 = 54%53 = 1Így ((20-L)*18)%53 = (16*18)%53 = 288%53 = 23 = "x" 
    A probléma a fenti algoritmussal, hogy K  és 
    L  értéke nem ismert a feladat során. Ellenben az input második 
    sora segítségével kiszámolható!
     
		Az input második sora négy karaktert tartalmaz, melyek 
		megadnak 2 titkosítatlan-titkosított betűpárt.Így például a "h n A z" sor azt jelenti, 
		hogy a titkosítatlan "h" karakter párja a 
		titkosított "n" karakter és a 
		titkosítatlan "A" karakter párja a 
		titkosított "z" karakter.Ezen információ segítségével "egyenletrendszerként" 
		kiszámolható a K és L értéke, hisz a titkosítás lényegében K*x 
		+ L = y elven történik ahol x és y a titkosítatlan-titkosított 
		betűpár és K és L az ismeretlenek. Mivel a feladatban két 
		titkosítatlan-titkosított betűpárt kapunk és pont két 
		ismeretlenünk van, így az egyenletrendszer megoldható. Az egyetlen nehézséget az 
		okozza, hogy most minden számolás modulo 53 történik, de az 
		osztás kivételével (ld. fent) minden művelet ugyanúgy zajlik, 
		mint a hagyományos egészek körében. Egyszerűen a végeredményt 
		kell %53-al reduálni. Példa |  |