'''
na dhmiourghsete programma se python pou dexetai ws eisodo akeraio arithmo m
me m>10 xrhsimopoiwntas try exception. En synexeia dhmiourgei mesw synarthshs
mia 2d lista h opoia periexei migadikous arithmous me pragmatiko kai fantastiko 
meros uniform katanomhs apo to -1 ws to 1 kai akribeia 2 dekadikwn pshfiwn.
H main stelnei th lista sth synarthsh(ara den exoume global). Meta h 
synarthsh kalei synarthsh pou diaxwrizei th 2d lista se 2 d listes opou h mia
exei to pragmatiko meros ths arxikhs kai h allh to fantastiko.
Sth synexeia mia allh synarthsh tha ypologizei kai tha epistrefei th mesh timh
ths listas tou fantastikou kai th megisth timh ths listas tou pragmatikou
merous opou tha typwnontai sth main
'''

#!/usr/bin/python3
import random

def read_integer():
	while True:
		try:
			m=int(input("Dwse m:"))
			if m<=10:
				raise ValueError("To m>10")
			return m
		except Exception as e:
			print(f"Error:{e}")
			exit(1)

def generate_complex_2d_list(m):
	return [[
		complex(round(random.uniform(-1,1),2),round(random.uniform(-1,1),2))
		for _ in range(m)]
		for _ in range(m)
		]

def split_real_imag(matrix):
	real_parts=[]
	imag_parts=[]
	for row in matrix:
		for z in row:
			real_parts.append(z.real)
			imag_parts.append(z.imag)
	return real_parts, imag_parts

def main():
	m=read_integer()
	complex_matrix=generate_complex_2d_list(m)
	for row in complex_matrix:
		print([f"{z.real}+{z.imag}i" for z in row])
	real_parts,imag_parts=split_real_imag(complex_matrix)
	print(f"Max real={max(real_parts)}, Mean imag={sum(imag_parts)/len(imag_parts)}")

if __name__=="__main__":
	main()
