LeetCode wants to give one of its best employees the option to travel among `n` cities to collect algorithm problems. But all work and no play makes Jack a dull boy, you could take vacations in some particular cities and weeks. Your job is to schedule the traveling to maximize the number of vacation days you could take, but there are certain rules and restrictions you need to follow.

Rules and restrictions:

1.  You can only travel among `n` cities, represented by indexes from `0` to `n - 1`. Initially, you are in the city indexed `0` on **Monday**.
2.  The cities are connected by flights. The flights are represented as an `n x n` matrix (not necessarily symmetrical), called `flights` representing the airline status from the city `i` to the city `j`. If there is no flight from the city `i` to the city `j`, `flights[i][j] == 0`; Otherwise, `flights[i][j] == 1`. Also, `flights[i][i] == 0` for all `i`.
3.  You totally have `k` weeks (each week has **seven days**) to travel. You can only take flights at most once per day and can only take flights on each week's Monday morning. Since flight time is so short, we do not consider the impact of flight time.
4.  For each city, you can only have restricted vacation days in different weeks, given an `n x k` matrix called `days` representing this relationship. For the value of `days[i][j]`, it represents the maximum days you could take a vacation in the city `i` in the week `j`.
5.  You could stay in a city beyond the number of vacation days, but you should work on the extra days, which will not be counted as vacation days.
6.  If you fly from city `A` to city `B` and take the vacation on that day, the deduction towards vacation days will count towards the vacation days of city `B` in that week.
7.  We do not consider the impact of flight hours on the calculation of vacation days.

Given the two matrices `flights` and `days`, return _the maximum vacation days you could take during_ `k` _weeks_.

**Example 1:**

**Input:** flights = \[\[0,1,1\],\[1,0,1\],\[1,1,0\]\], days = \[\[1,3,1\],\[6,0,3\],\[3,3,3\]\]
**Output:** 12
**Explanation:**
One of the best strategies is:
1st week : fly from city 0 to city 1 on Monday, and play 6 days and work 1 day.
(Although you start at city 0, we could also fly to and start at other cities since it is Monday.)
2nd week : fly from city 1 to city 2 on Monday, and play 3 days and work 4 days.
3rd week : stay at city 2, and play 3 days and work 4 days.
Ans = 6 + 3 + 3 = 12.

**Example 2:**

**Input:** flights = \[\[0,0,0\],\[0,0,0\],\[0,0,0\]\], days = \[\[1,1,1\],\[7,7,7\],\[7,7,7\]\]
**Output:** 3
**Explanation:**
Since there are no flights that enable you to move to another city, you have to stay at city 0 for the whole 3 weeks. 
For each week, you only have one day to play and six days to work.
So the maximum number of vacation days is 3.
Ans = 1 + 1 + 1 = 3.

**Example 3:**

**Input:** flights = \[\[0,1,1\],\[1,0,1\],\[1,1,0\]\], days = \[\[7,0,0\],\[0,7,0\],\[0,0,7\]\]
**Output:** 21
**Explanation:**
One of the best strategies is:
1st week : stay at city 0, and play 7 days.
2nd week : fly from city 0 to city 1 on Monday, and play 7 days.
3rd week : fly from city 1 to city 2 on Monday, and play 7 days.
Ans = 7 + 7 + 7 = 21

**Constraints:**

*   `n == flights.length`
*   `n == flights[i].length`
*   `n == days.length`
*   `k == days[i].length`
*   `1 <= n, k <= 100`
*   `flights[i][j]` is either `0` or `1`.
*   `0 <= days[i][j] <= 7`

렛코드는 최고의 직원 중 한 명에게 알고리즘 문제를 수집하기 위해 여러 도시를 여행할 수 있는 옵션을 제공하고자 합니다. 하지만 일만 하고 놀지 않으면 잭은 지루한 소년이 되고, 특정 도시와 주에 휴가를 갈 수 있습니다. 여러분의 임무는 휴가 일수를 최대화하기 위해 여행 일정을 잡는 것이지만, 따라야 할 규칙과 제한 사항이 있습니다.

규칙과 제한 사항:

1.  0`에서 `n - 1` 사이의 인덱스로 표시되는 `n`개의 도시 사이만 여행할 수 있습니다. 처음에 **월요일**에 인덱스가 `0`인 도시에 있습니다.
2.  도시들은 항공편으로 연결되어 있습니다. 항공편은 도시 `i`에서 도시 `j`까지의 항공사 상태를 나타내는 `flights`라고 하는 `n x n` 행렬(반드시 대칭일 필요는 없음)로 표현됩니다. 도시 `i`에서 도시 `j`로 가는 항공편이 없으면 `flights[i][j] == 0`이 되고, 그렇지 않으면 `flights[i][j] == 1`이 됩니다. 또한, 모든 `i`에 대해 `flights[i][i] == 0`입니다.
3.  여행할 수 있는 기간이 총 `k`주(각 주는 **7일**)입니다. 하루에 최대 한 번만 비행기를 탈 수 있으며 매주 월요일 아침에만 비행기를 탈 수 있습니다. 비행 시간이 매우 짧기 때문에 비행 시간의 영향은 고려하지 않습니다.
4.  각 도시마다 다른 주에만 제한된 휴가 일수를 가질 수 있으며, 이 관계를 나타내는 `days`라는 `n x k` 행렬이 주어집니다. days[i][j]`의 값은 주 `j`에 도시 `i`에서 휴가를 보낼 수 있는 최대 일수를 나타냅니다.
5.  휴가 일수를 초과하여 도시에 머무를 수 있지만 휴가 일수로 계산되지 않는 여분의 날에 근무해야 합니다.
6.  도시 `A`에서 도시 `B`로 비행기를 타고 이동하여 해당 날짜에 휴가를 사용하는 경우, 휴가 일수에 대한 공제는 해당 주에 도시 `B`의 휴가 일수로 계산됩니다.
7.  비행 시간이 휴가 일수 계산에 미치는 영향은 고려하지 않습니다.

항공편`과 `일`이라는 두 행렬이 주어졌을 때, `k` `주` 동안 사용할 수 있는 최대 휴가 일수를 반환합니다.

**예제 1:**

**Input:** flights = \[\[0,1,1\],\[1,0,1\],\[1,1,0\]\], days = \[\[1,3,1\],\[6,0,3\],\[3,3,3\]\]
**출력:** 12
**설명:**
가장 좋은 전략 중 하나는 다음과 같습니다:
1주차: 월요일에 0번 도시에서 1번 도시로 비행기를 타고 가서 6일을 놀고 하루를 일합니다.
(0번 도시에서 시작하지만 월요일이므로 다른 도시로 비행기를 타고 가서 시작할 수도 있습니다.)
2주차 : 월요일에 도시 1에서 도시 2로 비행기를 타고 이동하여 3일을 플레이하고 4일을 일합니다.
3주차 : 도시 2에 머물면서 3일은 놀고 4일은 일합니다.
정답 = 6 + 3 + 3 = 12입니다.

**예 2:**

**Input:** flights = \[\[0,0,0\],\[0,0,0\],\[0,0,0\],\[0,0,0\]\], days = \[\[1,1,1\],\[7,7,7\],\[7,7,7\]\]
**출력:** 3
**설명:**
다른 도시로 이동할 수 있는 항공편이 없으므로 3주 내내 도시 0에 머물러야 합니다.
매주 하루만 놀 수 있고 6일만 일할 수 있습니다.
따라서 최대 휴가 일수는 3일입니다.
정답 = 1 + 1 + 1 = 3입니다.

**예 3:**

**Input:** flights = \[\[0,1,1\],\[1,0,1\],\[1,1,0\]\], days = \[\[7,0,0\],\[0,7,0\],\[0,0,7\]\]
**출력:** 21
**설명:**
가장 좋은 전략 중 하나는 다음과 같습니다:
1주차 : 도시 0에 머무르며 7일간 플레이합니다.
2주차 : 월요일에 0번 도시에서 1번 도시로 비행하여 7일간 플레이합니다.
셋째 주 : 월요일에 도시 1에서 도시 2로 비행하여 7일간 플레이합니다.
답 = 7 + 7 + 7 = 21

**제약 조건:**

* `n == flights.length`
* `n == flights[i].length`
* `n == days.length`
* `k == days[i].length`
* `1 <= n, k <= 100`
* `flights[i][j]`는 `0` 또는 `1`입니다.
* `0 <= days[i][j] <= 7`입니다.
