import java.util.*;
import java.lang.*;
import java.io.*;

class Main {
    public static String solve(String[] files, String[] clues) {
        if (clues!= null && clues.length > 0) {
            System.err.println("CLUES - size : " + clues.length + ". Read line " + (clues.length-1));
            String password = clues[clues.length-1].split(" ")[1];
            String document = clues[clues.length-1].split(" ")[0];
            if (!password.contains(".")){
                System.err.println("VALID PASSWORD !");
                return "ROOT " + password;
            }else {
                System.err.println("INVALID PASSWORD : " + password);
                int ind=0;
                for (int i=0; i<files.length; i++){
                    if(files[i].equals(document)){
                        ind=i;
                        break;
                    }
                }
                if(ind+1<files.length){
                    //System.err.println(files[ind+1]);
                    return "READ " + files[ind+1];
                }else{
                    System.err.println("Files is done : build password");
                    String buildPassword = clues[0].split(" ")[1];
                    boolean activeBracket=false; //HARD
                    for(int i=1; i<clues.length; i++){
                        char[] buildPasswordToChar = buildPassword.toCharArray();
                        char[] currentClueToChar = clues[i].split(" ")[1].toCharArray();
                        
                        String bracket=""; //HARD
                        buildPassword="";
                        for(int j=0; j<buildPasswordToChar.length; j++){
                            if(!activeBracket && buildPasswordToChar[j]!='.')
                                buildPassword += buildPasswordToChar[j]+"";
                            else if(!activeBracket && currentClueToChar[j]!='.')
                                buildPassword += currentClueToChar[j]+"";
                            else if(!activeBracket)
                                buildPassword += ".";

                            if(buildPasswordToChar[j]=='[') //HARD
                                activeBracket = true;
                            if(buildPasswordToChar[j]==']') {
                                activeBracket = false;
                                char[] bracketToChar = bracket.replace("[","").toCharArray();
                                bracket="";
                                char letterInBracket;
                                for(int k=0; k<bracketToChar.length; k++){
                                    for(int l=k+1; l<bracketToChar.length; l++){
                                        if(bracketToChar[k]==bracketToChar[l]) {
                                            letterInBracket=bracketToChar[k];
                                            //System.err.println(letterInBracket);
                                            buildPassword=buildPassword.replace("[",String.valueOf(letterInBracket));
                                            break;
                                        }
                                    }
                                }
                            }
                            if(activeBracket)
                                bracket +=  buildPasswordToChar[j] + "" + currentClueToChar[j] ;//HARD
                        }
                    }
                    //System.err.println(buildPassword);
                    return "ROOT " + buildPassword;
                }
            }
        }

        if (files!= null &&  clues != null && files.length > 0) {
            System.err.println("FILES : " + files.length);
            return "READ " + files[0];
        }

        return "";
    }

    public static void main(String[] args){
        System.err.println("--TEST 0--");
        System.err.println(solve(new String[]{},new String[]{}));

        System.err.println("\n--TEST 1--");
        System.err.println(solve(new String[]{"/saves/important/diary.txt"},new String[]{}));
        System.err.println(solve(new String[]{"/saves/important/diary.txt"},new String[]{"/saves/important/diary.txt SecretPassword"}));

        System.err.println("\n--TEST 2--");
        System.err.println(solve(new String[]{"/saves/important/diary.txt","/orders/schedule.txt","/products/fruits.txt",
                "/taxes/previsions.txt"},new String[]{}));
        System.err.println(solve(new String[]{"/saves/important/diary.txt","/orders/schedule.txt","/products/fruits.txt",
                "/taxes/previsions.txt"},new String[]{"/saves/important/diary.txt .......Horse............."}));
        System.err.println(solve(new String[]{"/saves/important/diary.txt","/orders/schedule.txt","/products/fruits.txt",
                        "/taxes/previsions.txt"},
                new String[]{"/saves/important/diary.txt .......Horse.............","/orders/schedule.txt ............Battery......"}));
        System.err.println(solve(new String[]{"/saves/important/diary.txt","/orders/schedule.txt","/products/fruits.txt",
                        "/taxes/previsions.txt"},
                new String[]{"/saves/important/diary.txt .......Horse.............","/orders/schedule.txt ............Battery......","/products/fruits.txt Correct.................."}));
        System.err.println(solve(new String[]{"/saves/important/diary.txt","/orders/schedule.txt","/products/fruits.txt",
                        "/taxes/previsions.txt"},
                new String[]{"/saves/important/diary.txt .......Horse.............","/orders/schedule.txt ............Battery......","/products/fruits.txt Correct..................",
                        "/taxes/previsions.txt ...................Staple"}));


        System.err.println("\n--TEST 3--");
        System.err.println(solve(null,null));

        System.err.println("\n--TEST 4--");
        System.err.println(solve(new String[]{"/saves/important/diary.txt","/saves/important/notes.txt","/work/reports.txt"},
                new String[]{}));
        System.err.println(solve(new String[]{"/saves/important/diary.txt","/saves/important/notes.txt","/work/reports.txt"},
                new String[]{"/saves/important/diary.txt Sec...Passw..."}));
        System.err.println(solve(new String[]{"/saves/important/diary.txt","/saves/important/notes.txt","/work/reports.txt"},
                new String[]{"/saves/important/diary.txt Sec...Passw...","/saves/important/notes.txt ..cretP......."}));
        System.err.println(solve(new String[]{"/saves/important/diary.txt","/saves/important/notes.txt","/work/reports.txt"},
                new String[]{"/saves/important/diary.txt Sec...Passw...","/saves/important/notes.txt ..cretP.......",
                        "/work/reports.txt ..cretP...word"}));

        System.err.println("\n--TEST 5--");
        System.err.println(solve(new String[]{"/saves/important/diary.txt","/saves/important/notes.txt","/work/reports.txt"},
                new String[]{}));
        System.err.println(solve(new String[]{"/saves/important/diary.txt","/saves/important/notes.txt","/work/reports.txt"},
                new String[]{"/saves/important/diary.txt Sec...[aMPR]assw..."}));
        System.err.println(solve(new String[]{"/saves/important/diary.txt","/saves/important/notes.txt","/work/reports.txt"},
                new String[]{"/saves/important/diary.txt Sec...[aMPR]assw...","/saves/important/notes.txt ..cret[ABPX]......."}));
        System.err.println(solve(new String[]{"/saves/important/diary.txt","/saves/important/notes.txt","/work/reports.txt"},
                new String[]{"/saves/important/diary.txt Sec...[aMPR]assw...","/saves/important/notes.txt ..cret[ABPX].......",
                        "/work/reports.txt ..........word"}));
    }
}

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: