import java.util.*;
import java.lang.*;
import java.io.*;
import java.util.function.*;
 
class Ideone
{
    {
        StringUtil.indexOf("hello, world", 'l')
            .DoIfSuccess(foundIndex -> {
            });
    }
}
 
class StringUtil {
    public static Maybe
<Integer
> indexOf
(String haystack, 
char needle
) {         for (int i = 0; i < haystack.length(); ++i)
            if (haystack.charAt(i) == needle)
                return Maybe.<Integer>just(i);
        return Maybe.<Integer>nothing();
    }
}
 
class Maybe<ResultType> {
    public static <R> Maybe<R> nothing() {
        return new Maybe(false, null);
    }
 
    public static <R> Maybe<R> just(R resultValue) {
        return new Maybe(true, resultValue);
    }
 
    private final boolean isSucceeded;
    private final ResultType resultValue;
 
    private Maybe(boolean isSucceeded, ResultType resultValue) {
        this.isSucceeded = isSucceeded;
        this.resultValue = resultValue;
    }
 
    public void DoIfSuccess(Consumer<ResultType> postAction) {
        if (isSucceeded && postAction != null)
            postAction.accept(resultValue);
    }
}
				aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CmltcG9ydCBqYXZhLnV0aWwuZnVuY3Rpb24uKjsKCmNsYXNzIElkZW9uZQp7CiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb24KICAgIHsKICAgICAgICBTdHJpbmdVdGlsLmluZGV4T2YoImhlbGxvLCB3b3JsZCIsICdsJykKICAgICAgICAgICAgLkRvSWZTdWNjZXNzKGZvdW5kSW5kZXggLT4gewogICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFN0cmluZy5mb3JtYXQoImluZGV4PSVkIiwgZm91bmRJbmRleCkpOwogICAgICAgICAgICB9KTsKICAgIH0KfQoKY2xhc3MgU3RyaW5nVXRpbCB7CiAgICBwdWJsaWMgc3RhdGljIE1heWJlPEludGVnZXI+IGluZGV4T2YoU3RyaW5nIGhheXN0YWNrLCBjaGFyIG5lZWRsZSkgewogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaGF5c3RhY2subGVuZ3RoKCk7ICsraSkKICAgICAgICAgICAgaWYgKGhheXN0YWNrLmNoYXJBdChpKSA9PSBuZWVkbGUpCiAgICAgICAgICAgICAgICByZXR1cm4gTWF5YmUuPEludGVnZXI+anVzdChpKTsKICAgICAgICByZXR1cm4gTWF5YmUuPEludGVnZXI+bm90aGluZygpOwogICAgfQp9CgpjbGFzcyBNYXliZTxSZXN1bHRUeXBlPiB7CiAgICBwdWJsaWMgc3RhdGljIDxSPiBNYXliZTxSPiBub3RoaW5nKCkgewogICAgICAgIHJldHVybiBuZXcgTWF5YmUoZmFsc2UsIG51bGwpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgPFI+IE1heWJlPFI+IGp1c3QoUiByZXN1bHRWYWx1ZSkgewogICAgICAgIHJldHVybiBuZXcgTWF5YmUodHJ1ZSwgcmVzdWx0VmFsdWUpOwogICAgfQoKICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBpc1N1Y2NlZWRlZDsKICAgIHByaXZhdGUgZmluYWwgUmVzdWx0VHlwZSByZXN1bHRWYWx1ZTsKCiAgICBwcml2YXRlIE1heWJlKGJvb2xlYW4gaXNTdWNjZWVkZWQsIFJlc3VsdFR5cGUgcmVzdWx0VmFsdWUpIHsKICAgICAgICB0aGlzLmlzU3VjY2VlZGVkID0gaXNTdWNjZWVkZWQ7CiAgICAgICAgdGhpcy5yZXN1bHRWYWx1ZSA9IHJlc3VsdFZhbHVlOwogICAgfQoKICAgIHB1YmxpYyB2b2lkIERvSWZTdWNjZXNzKENvbnN1bWVyPFJlc3VsdFR5cGU+IHBvc3RBY3Rpb24pIHsKICAgICAgICBpZiAoaXNTdWNjZWVkZWQgJiYgcG9zdEFjdGlvbiAhPSBudWxsKQogICAgICAgICAgICBwb3N0QWN0aW9uLmFjY2VwdChyZXN1bHRWYWx1ZSk7CiAgICB9Cn0=