Only three problems. Maybe you were just so disappointed, but boy, some of the things you can exercise your brain with with 2D arrays are pretty tough. So I think we got enough brain exercise, don't you? Let's look at the first one. This was an A or B, which basically means we're really trying to hone in a one misconception here. The answer was B, and what I noticed here when I look at B is I'm like, "The rows are different." They're creepy because we did some math with the rows and the columns. But then I should look around only see if maybe it wasn't due to that. What I do notice is it goes 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 1, 2, 3 wrapping around or ignoring the end of each row. Anytime we have a repeated thing like that, I always think modulo. Moreover, something that's increasing there, there's foo plus, plus. So it turns out that, yeah, we're initializing foo to zero at the beginning and then basically, we're just going to keep incrementing foo, but we only want to grab the values, one, two and three. So we modulo by three and add one and we get one, two and three, and that way it's just going to constantly repeat that pattern, but it's going to fill in the entire row and column of the array, not worrying about starting it a new value at the end of a row. This next one was really hard. It just is. In fact, I think I was doing this and I realized actually had it backwards the first time, but I've got it all fixed now. So this code is supposed to mirror the bottom half of rows into the top half of the array. So given you all ready to an example, input, that's the one on top and what it looks like on the output. So do you see where you took the bottom two rows? We didn't just copying on top but we mirrored them into the top. I think I've got some stuff to let us explain that. Yes, so here we take the bottom row of our original input and we're going to put it in the top row of. That's actually overriding the same array. I'm just showing it in different place to make it easier. Then the second to the last row into the second row. It turns out, again, we're mirroring the bottom half into the top. We're only going to go over half of it in this case, since we only have four rows, only over two rows. So hopefully, you see the mirror of the bottom two rows into the top. Let's look through the rest of the code and analyze it, any of the unusual things a bit at a time. So the first thing we notice is, wait a minute. So first off, I didn't use row and column. So intentionally to be a little tricky about that. So maybe I'm going to watch for that as well. I used foo and bar and it says, tree subzero dot length, I'm like, "Wait, that's not normal. When I go over rows and columns, that's on the inner loop." So what this tells me is that this foo is going to control the columns. Because it's going to loop over all of the possible columns. So then when we look at bar and the one right above it, we see that's only going over the first half of the rows. We now see that bar is controlling our rows and foo is going to be controlling our columns. We double-check that with the array, or I'm sorry, with the loop headers. But what's really important here is, what's the job of this code? It's supposed to replace all columns in the top half of the rows. Bar is being used to index into the row and foo is being indexed into the column so hopefully, our foo loops will follow along with that, and they do. So to recap, we are going to loop over all of the columns but only the top half of the rows. We're overriding, that's good, and the missing code is what we're supposed to figure out what goes in there. So now we need to figure out what the missing code is. Here's the correct answer. Let me break it down for you and then I'll explain why students might pick the other ones. So bar, remember bar counts the row, foos is the column. Bar counts up over the top half of the rows. That's what our loop iterator said. So what does that mean for this expression? Well, tree.length is the number of rows but we need to index it at minus one. Then we're also going to subtract off bar because we're going to start at the bottom row and work our way halfway back up. So maybe I could have made it a little clear. I should have maybe said tree.length minus one, minus bar. So tree.length minus one says, last row in the array. Then by controlling it with subtracting off bar, as bar counts up, then this row is going to count down. So row is the inner loop. Then the last thing I want to point out is because we chose to have the tricky part of the columns in the outer loop and the rows in the inner loop, what order are they actually copying in? We're not going actually over all the columns, because columns isn't changing the fastest like we're used to. Row is the inner loop and it changes faster than columns. So I didn't copy all of them. But the first thing that would change would be the bottom-left star, it would get copied up into the top right corner. Then we would decrease with our index into tree there, it would be tree.length minus one, minus one. So that's going to be the second to the last row. That is going to get copy it up and then we'd be done. Then we're going to move our foo over by one. So we're going to actually copy each column wise up there. It's easier to draw. It's a lot easier to draw it on a board. Believe me, you don't want to make slides like these. It's really annoying. So where did I pull up my alternate for this? I have to admit, these probably aren't my best choice for discussion alternates, but I went with an off-by-one error. So if you do tree.length minus bar, I was hoping students may be like, "Oh, the row needs to change every time. So we need use bar, so it changes each time." But then I thought maybe they'd forget the minus one. So that was interesting. Then both of these are just trying to take along the fact that maybe students would mistake row and column because we tend to say foo bar, foo before bar, so maybe they would think row, column, that was my guess. Those were perhaps a little lame.