You have a video sharing platform where users can upload and delete videos. Each `video` is a **string** of digits, where the `ith` digit of the string represents the content of the video at minute `i`. For example, the first digit represents the content at minute `0` in the video, the second digit represents the content at minute `1` in the video, and so on. Viewers of videos can also like and dislike videos. Internally, the platform keeps track of the **number of views, likes, and dislikes** on each video.

When a video is uploaded, it is associated with the smallest available integer `videoId` starting from `0`. Once a video is deleted, the `videoId` associated with that video can be reused for another video.

Implement the `VideoSharingPlatform` class:

*   `VideoSharingPlatform()` Initializes the object.
*   `int upload(String video)` The user uploads a `video`. Return the `videoId` associated with the video.
*   `void remove(int videoId)` If there is a video associated with `videoId`, remove the video.
*   `String watch(int videoId, int startMinute, int endMinute)` If there is a video associated with `videoId`, increase the number of views on the video by `1` and return the substring of the video string starting at `startMinute` and ending at `min(endMinute, video.length - 1``)` (**inclusive**). Otherwise, return `"-1 "`.
*   `void like(int videoId)` Increases the number of likes on the video associated with `videoId` by `1` if there is a video associated with `videoId`.
*   `void dislike(int videoId)` Increases the number of dislikes on the video associated with `videoId` by `1` if there is a video associated with `videoId`.
*   `int[] getLikesAndDislikes(int videoId)` Return a **0-indexed** integer array `values` of length `2` where `values[0]` is the number of likes and `values[1]` is the number of dislikes on the video associated with `videoId`. If there is no video associated with `videoId`, return `[-1]`.
*   `int getViews(int videoId)` Return the number of views on the video associated with `videoId`, if there is no video associated with `videoId`, return `-1`.

**Example 1:**

**Input**
\[ "VideoSharingPlatform ",  "upload ",  "upload ",  "remove ",  "remove ",  "upload ",  "watch ",  "watch ",  "like ",  "dislike ",  "dislike ",  "getLikesAndDislikes ",  "getViews "\]
\[\[\], \[ "123 "\], \[ "456 "\], \[4\], \[0\], \[ "789 "\], \[1, 0, 5\], \[1, 0, 1\], \[1\], \[1\], \[1\], \[1\], \[1\]\]
**Output**
\[null, 0, 1, null, null, 0,  "456 ",  "45 ", null, null, null, \[1, 2\], 2\]

**Explanation**
VideoSharingPlatform videoSharingPlatform = new VideoSharingPlatform();
videoSharingPlatform.upload( "123 ");          // The smallest available videoId is 0, so return 0.
videoSharingPlatform.upload( "456 ");          // The smallest available `videoId` is 1, so return 1.
videoSharingPlatform.remove(4);              // There is no video associated with videoId 4, so do nothing.
videoSharingPlatform.remove(0);              // Remove the video associated with videoId 0.
videoSharingPlatform.upload( "789 ");          // Since the video associated with videoId 0 was deleted,
                                             // 0 is the smallest available `videoId`, so return 0.
videoSharingPlatform.watch(1, 0, 5);         // The video associated with videoId 1 is  "456 ".
                                             // The video from minute 0 to min(5, 3 - 1) = 2 is  "456 ", so return  "453 ".
videoSharingPlatform.watch(1, 0, 1);         // The video associated with videoId 1 is  "456 ".
                                             // The video from minute 0 to min(1, 3 - 1) = 1 is  "45 ", so return  "45 ".
videoSharingPlatform.like(1);                // Increase the number of likes on the video associated with videoId 1.
videoSharingPlatform.dislike(1);             // Increase the number of dislikes on the video associated with videoId 1.
videoSharingPlatform.dislike(1);             // Increase the number of dislikes on the video associated with videoId 1.
videoSharingPlatform.getLikesAndDislikes(1); // There is 1 like and 2 dislikes on the video associated with videoId 1, so return \[1, 2\].
videoSharingPlatform.getViews(1);            // The video associated with videoId 1 has 2 views, so return 2.

**Example 2:**

**Input**
\[ "VideoSharingPlatform ",  "remove ",  "watch ",  "like ",  "dislike ",  "getLikesAndDislikes ",  "getViews "\]
\[\[\], \[0\], \[0, 0, 1\], \[0\], \[0\], \[0\], \[0\]\]
**Output**
\[null, null,  "-1 ", null, null, \[-1\], -1\]

**Explanation**
VideoSharingPlatform videoSharingPlatform = new VideoSharingPlatform();
videoSharingPlatform.remove(0);              // There is no video associated with videoId 0, so do nothing.
videoSharingPlatform.watch(0, 0, 1);         // There is no video associated with videoId 0, so return  "-1 ".
videoSharingPlatform.like(0);                // There is no video associated with videoId 0, so do nothing.
videoSharingPlatform.dislike(0);             // There is no video associated with videoId 0, so do nothing.
videoSharingPlatform.getLikesAndDislikes(0); // There is no video associated with videoId 0, so return \[-1\].
videoSharingPlatform.getViews(0);            // There is no video associated with videoId 0, so return -1.

**Constraints:**

*   `1 <= video.length <= 105`
*   The sum of `video.length` over all calls to `upload` does not exceed `105`
*   `video` consists of digits.
*   `0 <= videoId <= 105`
*   `0 <= startMinute < endMinute < 105`
*   `startMinute < video.length`
*   The sum of `endMinute - startMinute` over all calls to `watch` does not exceed `105`.
*   At most `105` calls **in total** will be made to all functions.

사용자가 동영상을 업로드하고 삭제할 수 있는 동영상 공유 플랫폼이 있습니다. 각 '동영상'은 숫자로 이루어진 **스트링**이며, 여기서 문자열의 'i번째' 숫자는 동영상의 분 'i'시점의 콘텐츠를 나타냅니다. 예를 들어, 첫 번째 숫자는 동영상의 `0`분 콘텐츠를 나타내고, 두 번째 숫자는 동영상의 `1`분 콘텐츠를 나타내는 식입니다. 동영상 시청자는 동영상에 좋아요와 싫어요를 표시할 수도 있습니다. 내부적으로 플랫폼은 각 동영상의 **조회수, 좋아요, 싫어요**를 추적합니다.

동영상이 업로드되면 '0'부터 시작하여 사용 가능한 가장 작은 정수인 'videoId'와 연결됩니다. 동영상이 삭제되면 해당 동영상에 연결된 `videoId`는 다른 동영상에 재사용할 수 있습니다.

VideoSharingPlatform` 클래스를 구현합니다:

* `VideoSharingPlatform()` 객체를 초기화합니다.
* `int upload(String video)` 사용자가 `비디오`를 업로드합니다. 동영상과 연관된 `videoId`를 반환합니다.
* `void remove(int videoId)` `videoId`와 연관된 동영상이 있는 경우, 해당 동영상을 제거합니다.
* `String watch(int videoId, int startMinute, int endMinute)` `videoId`와 연관된 동영상이 있으면 해당 동영상의 조회 수를 `1`씩 증가시키고 `startMinute`에서 시작하여 `min(endMinute, video.length - 1``)`에서 끝나는 동영상 문자열의 부분 문자열을 반환합니다(**inclusive**). 그렇지 않으면 `"-1"`을 반환합니다.
* void like(int videoId)` `videoId`와 연관된 동영상이 있으면 해당 동영상의 '좋아요' 개수를 `1` 증가시킵니다.
* `void dislike(int videoId)` `videoId`와 연관된 동영상이 있을 경우, 해당 동영상에 대한 싫어요 개수를 `1` 증가시킵니다.
* `int[] getLikesAndDislikes(int videoId)` 길이 `2`의 **0 인덱싱** 정수 배열 `값`을 반환합니다. 여기서 `값[0]`은 좋아요 개수이고 `값[1]`은 `videoId`와 연관된 동영상의 싫어요 개수입니다. videoId`와 연관된 동영상이 없으면 `[-1]`을 반환합니다.
* `int getViews(int videoId)` `videoId`와 연관된 동영상의 조회수를 반환하며, `videoId`와 연관된 동영상이 없는 경우 `-1`을 반환합니다.

**예제 1:**

**입력**
\["VideoSharingPlatform ", "upload ", "업로드 ", "제거 ", "제거 ", "업로드 ", "보기 ", "보기 ", "좋아요 ", "싫어요 ", "싫어요 ", "getLikesAndDislikes ", "getViews "\]
\[\[\], \[ "123 "\], \[ "456 "\], \[4\], \[0\], \[ "789 "\], \[1, 0, 5\], \[1, 0, 1\], \[1\], \[1\], \[1\], \[1\], \[1\]\]
**출력**
\[널, 0, 1, 널, 널, 널, 0, "456 ", "45 ", 널, 널, 널, 널, \[1, 2\], 2\]

설명** **설명
비디오 공유 플랫폼 비디오 공유 플랫폼 = 새로운 비디오 공유 플랫폼();
videoSharingPlatform.upload( "123 "); // 사용 가능한 가장 작은 videoId는 0이므로 0을 반환합니다.
videoSharingPlatform.upload("456 "); // 사용 가능한 가장 작은 `videoId`는 1이므로 1을 반환합니다.
videoSharingPlatform.remove(4); // videoId 4와 연관된 동영상이 없으므로 아무것도 하지 않습니다.
videoSharingPlatform.remove(0); // videoId 0과 연관된 동영상을 제거합니다.
videoSharingPlatform.upload( "789 "); // videoId 0과 연관된 동영상이 삭제되었으므로,
                                             // 0은 사용 가능한 가장 작은 `videoId`이므로 0을 반환합니다.
videoSharingPlatform.watch(1, 0, 5); // videoId 1과 연관된 동영상은 "456 " 입니다.
                                             // 분 0부터 분(5, 3 - 1) = 2까지의 동영상은 "456"이므로 "453"을 반환합니다.
videoSharingPlatform.watch(1, 0, 1); // videoId 1과 연관된 동영상은 "456" 입니다.
                                             // 분 0부터 분(1, 3 - 1) = 1까지의 동영상은 "45"이므로 "45"를 반환합니다.
videoSharingPlatform.like(1); // videoId 1과 연결된 동영상의 좋아요 수를 늘립니다.
videoSharingPlatform.dislike(1); // videoId 1과 연관된 동영상의 싫어요 개수를 늘립니다.
videoSharingPlatform.dislike(1); // videoId 1과 연관된 동영상에 대한 싫어요 개수를 늘립니다.
videoSharingPlatform.getLikesAndDislikes(1); // videoId 1과 연관된 동영상에 좋아요 1개와 싫어요 2개가 있으므로 \[1, 2\]를 반환합니다.
videoSharingPlatform.getViews(1); // videoId 1과 연관된 동영상의 조회수가 2이므로 2를 반환합니다.

**예제 2:**

**입력**
\["VideoSharingPlatform ", "remove ", "watch ", "like ", "dislike ", "getLikesAndDislikes ", "getViews"\]
\[\[\], \[0\], \[0, 0, 1\], \[0\], \[0\], \[0\], \[0\]\]
**출력**
\[널, 널, "-1 ", 널, 널, 널, \[-1\], -1\]

설명** **설명
비디오 공유 플랫폼 비디오 공유 플랫폼 = 새로운 비디오 공유 플랫폼();
videoSharingPlatform.remove(0); // videoId 0과 연관된 동영상이 없으므로 아무것도 하지 않습니다.
videoSharingPlatform.watch(0, 0, 1); // videoId 0과 연관된 동영상이 없으므로 "-1"을 반환합니다.
videoSharingPlatform.like(0); // videoId 0과 연관된 동영상이 없으므로 아무것도 하지 않습니다.
videoSharingPlatform.dislike(0); // videoId 0과 연관된 동영상이 없으므로 아무것도 하지 않습니다.
videoSharingPlatform.get좋아요및싫어요(0); // videoId 0과 연관된 동영상이 없으므로 \[-1\]을 반환합니다.
videoSharingPlatform.getViews(0); // videoId 0과 연관된 동영상이 없으므로 -1을 반환합니다.

**제약 조건:**

* `1 <= video.length <= 105`
* 업로드`에 대한 모든 호출에 대한 `video.length`의 합이 `105`를 초과하지 않아야 합니다.
* `비디오`는 숫자로 구성됩니다.
* `0 <= videoId <= 105`
* `0 <= startMinute < endMinute < 105`
* `startMinute < video.length`
* watch`에 대한 모든 호출에 대한 `endMinute - startMinute`의 합이 `105`를 초과하지 않습니다.
* 모든 함수에 대해 최대 `105` 호출이 **전체적으로** 이루어집니다.
