# coding: utf8
from PIL import Image as Im
#import math
import argparse
import fileinput

#####################################################
#
# pour tester votre programme :
#     python stego.py <002_sample_img2.in
#     python stego.py <003_sample_img3.in
# si le résultat correspond à la phrase dans les .ans
# alors vous pouvez soumettre votre programme
#####################################################

#######################
#  RSA functions (do not change)
#######################
from random import *

def testPrimaliteMillerRabin(n,t):
    testes = []
    if n % 2 == 0: return False
    s,d = 0, n-1
    while d % 2 == 0 :
        s +=1
        d /= 2 
    j = 0 
    ret = True
    while j < t and ret :
        # choix de a 
        a = randint(1,n-1)
        while a in testes:
            a = randint(1,n-1)
        # calcul de a^(d) [n]
        if pow(a, d, n) != 1:
            ret = False
            r=0
            while r < s and not ret:
                if pow(a, 2**r * d, n) ==  n-1:
                    ret= True
                else :
                    r+=1
        j+=1
        testes +=[a]
    return ret

def genereUnNombre(M):
	n = randint(1,9)
	for i in range(M - 2):
		n = n * 10 + randint(0,9)
	last = randint(0,9)
	while(last in {0,2,4,5,6,8}):
		last = randint(0,9)
	n = n * 10 + last
	return n

def genereUnNombrePremier(M):
	n = genereUnNombre(M)
	while(testPrimaliteMillerRabin(n,50) == False):
		n = genereUnNombre(M)
	return n

def pgcd(a,b):
	if b==0: return a
	else:
		r = a%b
		return pgcd(b,r)

def testPrimaliteDeuxChiffres(a,b):
	if pgcd(a,b) == 1: return True
	return False

def calculclepublique(phi):
	e = genereUnNombrePremier(100)
	while (testPrimaliteDeuxChiffres(e,phi) == False):
		e =genereUnNombrePremier(100)
	return e

def bezout(a,b):
	if b==0: return [1,0]
	else:
		uv = bezout(b,a%b)
		return [uv[1],uv[0]-uv[1]*(a/b)]

def calculcleprive(e,phi):
	xy = bezout(e,phi)
	d = xy[0]
	while d < 0: d = d + phi
	while(d > phi): d = d - phi
	return d

def chiffrement(m,e,n):
	return pow(m,e,n)

def dechiffrement(a,d,n):
	return pow(a,d,n)
    
#######################
# end of RSA functions
#######################

#######################
# tools functions
#######################
def bin(val,n):

    # A COMPLETER :
    # transforme val en une liste de 0/1
    # correspondant à l'écriture binaire
    # de elem sur n bits
    # par exemple bin(5,4) doit renvoyer [0,1,0,1]

# let ch be a binary number expressed on n bits.
# This function returns the decimal value of this 
# binary number.
def dec(b,n):

    # A COMPLETER
    # retourne la valeur decimale de b
    # ce dernier étant une valeur binaire
    # sur n bits, sous la forme d'une liste
    # de 0/1
    # Rq : n peut être différent de len(b)
    # meme si l'usage courant est d'avoir
    # l'égalité
    # par ex dec([0,1,0,1],4) doit renvoyer 5
    # mais dec([0,1,0,1],2) doit renvoyer 1.25


#######################
# end of tools functions
#######################

##############################
# decoding function on image i
##############################
import math

def decode(i):

    # A COMPLETER

########################################
# reading the input image in PPM format
########################################

is_first = True
cpt=0
x,y=0,0
for line in fileinput.input():
    if line[0] =='#' or line[0] =='P':
        pass
    else:
        if is_first :
            is_first = False
            [nbc,nbl]=[int(t) for t in line.split()]
            is_max = True
            img = Im.new("RGB",(nbc,nbl))
        else : 
            if is_max :
                cpt=0
                val=[0,0,0]
                is_max = False
            else:
                val[cpt]=int(line)
                cpt = (cpt + 1) %3
                if cpt == 0 :
                    img.putpixel((x,y),(val[0],val[1],val[2]))
                    x = (x+1) %nbc
                    if x == 0 :
                        y = (y +1) %nbl
                    

##########################################
# decoding the message hidden in the image
##########################################
print decode(img)
