The three parts are the offset from the start of the input, in hex; the data in hex; and the data in characters, if they're printable. 16 bytes to a line, since it's a nice round number and fits nicely on a screen.
A display like that is very often used in cases where both the binary and the textual data may be important. E.g.
tcpdump -X uses a similar one.
On your first line:
00000000: 5036 0a31 3131 2031 3332 0a32 3535 0a55 P6.111 132.255.U
00000000 is zero, since this is the beginning;
0a are the character codes for
6, and the newline, and so on. Unprintable characters are printed as dots on the right hand column.
Note that in some variants, the bytes in the middle section may be "inverted" within each group. This happens if the program interprets the input as little-endian numbers, and displays them as such, instead of as individual bytes concatenated.
xxd -e does exactly this. Consider:
$ printf "ABCD" | xxd -e -g2
00000000: 4241 4443 ABCD
B appear in an inverted order, as well as the two others.
od from GNU coreutils also inverts the bytes within the groups. When in doubt, double-check, or aim to get a one-by-one grouping. (compare e.g.
od -x and
od -tx1 in this.)
Of course, the meaning of the data itself can be found out from the documentation for the ppm format. My system has the man page
ppm(5). (the online version on die.net has broken formatting.)
From that first line we can tell it's an RGB picture of size 111x132 pixels with 8-bits per sample.