| In
            a typical filesystem, there are files, representing complete units of
            data. These files are contained in directories, and these directories,
            in turn, may be contained in other directories, and so on. A path is a pointer to a specific file or directory in this stucture. Most Unix-like OSes have a single root
            directory, that has all other directories and files directly or
            indirectly (via other directories) inside it. Such OSes use the
            following structure for file paths: /<directory-name>/<directory-name>/.../<directory-name>/<file-name> and, correspondingly, the following structure for directory paths: /<directory-name>/<directory-name>/.../<directory-name> For example, "/etc/passwd" (all quotes here and below are for
            clarity only) points to a file named "passwd" inside a directory named
            "etc" inside the root directory. Other valid file names might be
            "/home/user/pictures/me" or just "/file". In this problem, we allow
            only nonempty sequences of lowercase letters ('a'-'z') as file and
            directory names. A special case is the root directory itself, which is referred to as just "/". When a user works with such an OS, one of the directories is chosen
            as 'current'. Such a designation allows her to refer to the files in
            that directory without specifying the full path to the current
            directory. For example, if the current directory is
            "/home/user/pictures", then one might refer to the file
            "/home/user/pictures/me" as just "me" (note that such a short form can
            be easily spotted by the absence of the starting '/' character).
            Moreover, the files in subdirectories of the current directory can also
            be referred to in a short manner: "/home/user/pictures/others/she" can
            be referred to as "others/she". And even more exciting is the ability to have short references for
            files outside the current folder. More specifically, ".." means "the
            directory one level above the current directory", "../.." means "the
            directory two levels above the current directory", and so on. For
            example, if the current directory is "/home/user/pictures", and you
            want to refer to "/home/top/data/file", you can express that as
            "../../top/data/file". Given a String path, indicating the complete path to the file that needs to be referred to, and a String currentDir,
            indicating the current directory, return a String that contains the
            relative path to that file according to the above rules. You should
            choose the shortest of all possible relative paths (for example, if the
            current directory is "/home/user/pictures", you should use
            "../movies/title" and not "../../user/movies/title" as a pointer to
            "/home/user/movies/title"). Some files and/or directories may have coinciding names, but it is
            impossible to have two files or two directories or a file and a
            directory with the same name inside the same directory, so file and
            directory paths are not ambiguous. It is guaranteed that the given data
            describes a valid file and directory according to the above rules. In
            particular, they will not contradict - for example, path="/home/user/some" and currentDir="/home/user/some/other"
            are a contradiction, since it implies that a file and a directory both
            named "some" exist inside the directory "/home/user". |