def parse(inFile):
    [R,C,D] = inFile.getInts()
    return [inFile.readline() for r in xrange(R)]

def solve(data):
    R = len(data)
    C = len(data[0])
    sums=[[(0,0,0) for i in xrange(C+1)] for j in xrange(R+1)]
    for i in xrange(R):
        for j in xrange(C):
            w = int(data[i][j])
            sums[i+1][j+1] = (2 * w * i, 2 * w * j, w)
        for j in xrange(C):
            sums[i+1][j+1] = tuple(sums[i+1][j][k] + sums[i+1][j+1][k] for k in xrange(3))
        for j in xrange(C,0,-1):
            sums[i+1][j] = tuple(sums[i][j][k] + sums[i+1][j][k] for k in xrange(3))
    for dim in xrange(min(R,C),2,-1):
        for i in xrange(R+1-dim):
            for j in xrange(C+1-dim):
                ins = [(i,j),(i+dim,j+dim)]
                outs = [(i+dim,j),(i,j+dim)]
                blade = tuple(sum([sums[i[0]][i[1]][k] for i in ins])-sum([sums[o[0]][o[1]][k] for o in outs]) for k in xrange(3))
                for pti in [i, i + dim - 1]:
                    for ptj in [j, j + dim - 1]:
                        w = int(data[pti][ptj])
                        blade = (blade[0] - 2 * w * pti, blade[1] - 2 * w * ptj, blade[2] - w)
                if (blade == (blade[2]*(2*i+dim-1),blade[2]*(2*j+dim-1),blade[2])):
                    return dim
    return "IMPOSSIBLE"

if __name__ == "__main__":
    from GCJ import GCJ
    GCJ(parse, solve, "/Users/lpebody/gcj/2011_round2/", "b").run()

            
