import java.util.*;
class Main {
    static final char DELIM = ';';
    static final char ESCAPE = ':';
    public static void main
(String[] args
) {  
        String concat 
= concat
(a,b,c,d,e,f,g
);  
        String[] tokens 
= split
(concat
);  
        int pos = 0;
        System.
out.
println(test
(a,tokens
[pos
++]));         System.
out.
println(test
(b,tokens
[pos
++]));         System.
out.
println(test
(c,tokens
[pos
++]));         System.
out.
println(test
(d,tokens
[pos
++]));         System.
out.
println(test
(e,tokens
[pos
++]));         System.
out.
println(test
(f,tokens
[pos
++]));         System.
out.
println(test
(g,tokens
[pos
++]));     }
 
        StringBuilder sb = new StringBuilder();
            String r 
= s.
replace(e, ee
).
replace(d, ed
);             System.
out.
println(s 
+ " becomes " + r
);             sb.append(r).append(d);
        }
 
        String fp 
= sb.
toString().
substring(0,sb.
length() - 1);         System.
out.
println("Final product:");         return fp; // trim off the last delim
    }
 
        List<String> tokens = new ArrayList<String>();
        StringBuilder sb = new StringBuilder();
        boolean escaped = false;
        for(int i = 0; i < concat.length(); i++) {
            char c = concat.charAt(i);
            if(c == ESCAPE && !escaped) {
                escaped = true;
                continue;
            }
            if(c == DELIM && !escaped) {
                tokens.add(sb.toString());
                sb = new StringBuilder();
                continue;
            }
            sb.append(c);
            escaped = false;
        }
        tokens.add(sb.toString());
        return tokens.
toArray(new String[0]);     }
 
        return "Expected '" + exp + "', Actual '" + act + "', Matches " + exp.equals(act);
    }
}
				aW1wb3J0IGphdmEudXRpbC4qOwpjbGFzcyBNYWluIHsKICAgIHN0YXRpYyBmaW5hbCBjaGFyIERFTElNID0gJzsnOwogICAgc3RhdGljIGZpbmFsIGNoYXIgRVNDQVBFID0gJzonOwogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgIFN0cmluZyBhID0gImFiYztkZWYiOwogICAgICAgIFN0cmluZyBiID0gImphOjNmciI7CiAgICAgICAgU3RyaW5nIGMgPSAiOyI7CiAgICAgICAgU3RyaW5nIGQgPSAiIjsKICAgICAgICBTdHJpbmcgZSA9ICI6IjsKICAgICAgICBTdHJpbmcgZiA9ICI4Mzs6Ozo7Ozs7IjsKICAgICAgICBTdHJpbmcgZyA9ICI6OyI7CiAgICAgICAgCiAgICAgICAgU3RyaW5nIGNvbmNhdCA9IGNvbmNhdChhLGIsYyxkLGUsZixnKTsKICAgICAgICAKICAgICAgICBTdHJpbmdbXSB0b2tlbnMgPSBzcGxpdChjb25jYXQpOwogICAgICAgIAogICAgICAgIGludCBwb3MgPSAwOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0ZXN0KGEsdG9rZW5zW3BvcysrXSkpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0ZXN0KGIsdG9rZW5zW3BvcysrXSkpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0ZXN0KGMsdG9rZW5zW3BvcysrXSkpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0ZXN0KGQsdG9rZW5zW3BvcysrXSkpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0ZXN0KGUsdG9rZW5zW3BvcysrXSkpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0ZXN0KGYsdG9rZW5zW3BvcysrXSkpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0ZXN0KGcsdG9rZW5zW3BvcysrXSkpOwogICAgfQogICAgCiAgICBzdGF0aWMgU3RyaW5nIGNvbmNhdChTdHJpbmcuLi4gc3MpIHsKICAgICAgICBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKICAgICAgICBmaW5hbCBTdHJpbmcgZSA9IFN0cmluZy52YWx1ZU9mKEVTQ0FQRSk7CiAgICAgICAgZmluYWwgU3RyaW5nIGVlID0gZSArIEVTQ0FQRTsKICAgICAgICBmaW5hbCBTdHJpbmcgZCA9IFN0cmluZy52YWx1ZU9mKERFTElNKTsKICAgICAgICBmaW5hbCBTdHJpbmcgZWQgPSBlICsgZDsKICAgICAgICBmb3IoU3RyaW5nIHMgOiBzcykgewogICAgICAgICAgICBTdHJpbmcgciA9IHMucmVwbGFjZShlLCBlZSkucmVwbGFjZShkLCBlZCk7CiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzICsgIiBiZWNvbWVzICIgKyByKTsKICAgICAgICAgICAgc2IuYXBwZW5kKHIpLmFwcGVuZChkKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgU3RyaW5nIGZwID0gc2IudG9TdHJpbmcoKS5zdWJzdHJpbmcoMCxzYi5sZW5ndGgoKSAtIDEpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRmluYWwgcHJvZHVjdDoiKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZnApOwogICAgICAgIHJldHVybiBmcDsgLy8gdHJpbSBvZmYgdGhlIGxhc3QgZGVsaW0KICAgIH0KICAgIAogICAgc3RhdGljIFN0cmluZ1tdIHNwbGl0KFN0cmluZyBjb25jYXQpIHsKICAgICAgICBMaXN0PFN0cmluZz4gdG9rZW5zID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CiAgICAgICAgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CiAgICAgICAgYm9vbGVhbiBlc2NhcGVkID0gZmFsc2U7CiAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IGNvbmNhdC5sZW5ndGgoKTsgaSsrKSB7CiAgICAgICAgICAgIGNoYXIgYyA9IGNvbmNhdC5jaGFyQXQoaSk7CiAgICAgICAgICAgIGlmKGMgPT0gRVNDQVBFICYmICFlc2NhcGVkKSB7CiAgICAgICAgICAgICAgICBlc2NhcGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmKGMgPT0gREVMSU0gJiYgIWVzY2FwZWQpIHsKICAgICAgICAgICAgICAgIHRva2Vucy5hZGQoc2IudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICAgICBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBzYi5hcHBlbmQoYyk7CiAgICAgICAgICAgIGVzY2FwZWQgPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgdG9rZW5zLmFkZChzYi50b1N0cmluZygpKTsKICAgICAgICByZXR1cm4gdG9rZW5zLnRvQXJyYXkobmV3IFN0cmluZ1swXSk7CiAgICB9CiAgICAKICAgIHN0YXRpYyBTdHJpbmcgdGVzdChTdHJpbmcgZXhwLCBTdHJpbmcgYWN0KSB7CiAgICAgICAgcmV0dXJuICJFeHBlY3RlZCAnIiArIGV4cCArICInLCBBY3R1YWwgJyIgKyBhY3QgKyAiJywgTWF0Y2hlcyAiICsgZXhwLmVxdWFscyhhY3QpOwogICAgfQp9
				
				
				
				
				
			 
			
				
			
			
				
	
		
		
	
	
		abc;def becomes abc:;def
ja:3fr becomes ja::3fr
; becomes :;
 becomes 
: becomes ::
83;:;:;;;; becomes 83:;:::;:::;:;:;:;
:; becomes :::;
Final product:
abc:;def;ja::3fr;:;;;::;83:;:::;:::;:;:;:;;:::;
Expected 'abc;def', Actual 'abc;def', Matches true
Expected 'ja:3fr', Actual 'ja:3fr', Matches true
Expected ';', Actual ';', Matches true
Expected '', Actual '', Matches true
Expected ':', Actual ':', Matches true
Expected '83;:;:;;;;', Actual '83;:;:;;;;', Matches true
Expected ':;', Actual ':;', Matches true