<p>You are given two integers <code>m</code> and <code>n</code>, which represent the dimensions of a matrix.</p>

<p>You are also given the <code>head</code> of a linked list of integers.</p>

<p>Generate an <code>m x n</code> matrix that contains the integers in the linked list presented in <strong>spiral</strong> order <strong>(clockwise)</strong>, starting from the <strong>top-left</strong> of the matrix. If there are remaining empty spaces, fill them with <code>-1</code>.</p>

<p>Return <em>the generated matrix</em>.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>
<img alt="" src="https://assets.leetcode.com/uploads/2022/05/09/ex1new.jpg" style="width: 240px; height: 150px;" />
<pre>
<strong>Input:</strong> m = 3, n = 5, head = [3,0,2,6,8,1,7,9,4,2,5,5,0]
<strong>Output:</strong> [[3,0,2,6,8],[5,0,-1,-1,1],[5,2,4,9,7]]
<strong>Explanation:</strong> The diagram above shows how the values are printed in the matrix.
Note that the remaining spaces in the matrix are filled with -1.
</pre>

<p><strong class="example">Example 2:</strong></p>
<img alt="" src="https://assets.leetcode.com/uploads/2022/05/11/ex2.jpg" style="width: 221px; height: 60px;" />
<pre>
<strong>Input:</strong> m = 1, n = 4, head = [0,1,2]
<strong>Output:</strong> [[0,1,2,-1]]
<strong>Explanation:</strong> The diagram above shows how the values are printed from left to right in the matrix.
The last space in the matrix is set to -1.</pre>

<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>1 &lt;= m, n &lt;= 10<sup>5</sup></code></li>
	<li><code>1 &lt;= m * n &lt;= 10<sup>5</sup></code></li>
	<li>The number of nodes in the list is in the range <code>[1, m * n]</code>.</li>
	<li><code>0 &lt;= Node.val &lt;= 1000</code></li>
</ul>

"""
You are given two integers m and n, which represent the dimensions of a matrix.

You are also given the head of a linked list of integers.

Generate an m x n matrix that contains the integers in the linked list presented in 
spiral order (clockwise), starting from the top-left of the matrix. If there are remaining 
empty spaces, fill them with -1.

Return the generated matrix.

start with everything be -1

start at 0,0 fill in array poistions while there is still items in the linkedlist

we just need to keep track of the bounds and where we have already been and the only option
is to go further into the array

"""




# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def spiralMatrix(self, m: int, n: int, head: Optional[ListNode]) -> List[List[int]]:
        ans = []
        for _ in range(m):
            ans.append([-1] * n)

        v = set()
        x,y = 0,-1

        while head:
            # ans[x][y] = head.val
            # head = head.next
            # v.add((x,y))
            # first go all the way to the right
            while (y + 1  < len(ans[0]) and (x,y+1) not in v) and head:
                y += 1
                ans[x][y] = head.val
                head = head.next
                v.add((x,y))

            # then all the way down
            while (x + 1 < len(ans)  and (x+1,y) not in v) and head:
                x += 1
                ans[x][y] = head.val
                head = head.next
                v.add((x,y))

            #back all the way to the left
            while (y - 1 >= 0 and (x,y-1) not in v) and head:
                y -= 1
                ans[x][y] = head.val
                head = head.next
                v.add((x,y))

            #all the way up
            while (x - 1 >= 0 and (x-1, y) not in v) and head:
                x -= 1
                ans[x][y] = head.val
                head = head.next
                v.add((x,y))
            
            # # then if all that is vistied back the to righ
            # else:
            #     y += 1

        return ans
        
863