import java.util.*;
import java.lang.*;
import java.io.*;
 
class Ideone
{
	{
		ResultOfIndexOf result = StringUtil.indexOf("hello, world", 'l');
		if (result.isFound())
			System.
out.
println(String.
format("index=%d", result.
foundIndex())); 	}
}
 
class StringUtil {
	public static ResultOfIndexOf indexOf
(String haystack, 
char needle
) { 		for (int i = 0; i < haystack.length(); ++i)
			if (haystack.charAt(i) == needle)
				return new ResultOfIndexOf(i);
		return new ResultOfIndexOf();
	}
}
 
class ResultOfIndexOf {
	private final boolean isFound;
	private final int foundIndex;
	ResultOfIndexOf() {
		this(false, 0);
	}
	ResultOfIndexOf(int foundIndex) {
		this(true, foundIndex);
	}
	private ResultOfIndexOf(boolean isFound, int foundIndex) {
		this.isFound = isFound;
		this.foundIndex = foundIndex;
	}
	public boolean isFound() {
		return isFound;
	}
	public int foundIndex() {
		if (!isFound)
		return foundIndex;
	}
}
 
				aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgpjbGFzcyBJZGVvbmUKewoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBqYXZhLmxhbmcuRXhjZXB0aW9uCgl7CgkJUmVzdWx0T2ZJbmRleE9mIHJlc3VsdCA9IFN0cmluZ1V0aWwuaW5kZXhPZigiaGVsbG8sIHdvcmxkIiwgJ2wnKTsKCQlpZiAocmVzdWx0LmlzRm91bmQoKSkKCQkJU3lzdGVtLm91dC5wcmludGxuKFN0cmluZy5mb3JtYXQoImluZGV4PSVkIiwgcmVzdWx0LmZvdW5kSW5kZXgoKSkpOwoJfQp9CgpjbGFzcyBTdHJpbmdVdGlsIHsKCXB1YmxpYyBzdGF0aWMgUmVzdWx0T2ZJbmRleE9mIGluZGV4T2YoU3RyaW5nIGhheXN0YWNrLCBjaGFyIG5lZWRsZSkgewoJCWZvciAoaW50IGkgPSAwOyBpIDwgaGF5c3RhY2subGVuZ3RoKCk7ICsraSkKCQkJaWYgKGhheXN0YWNrLmNoYXJBdChpKSA9PSBuZWVkbGUpCgkJCQlyZXR1cm4gbmV3IFJlc3VsdE9mSW5kZXhPZihpKTsKCQlyZXR1cm4gbmV3IFJlc3VsdE9mSW5kZXhPZigpOwoJfQp9CgpjbGFzcyBSZXN1bHRPZkluZGV4T2YgewoJcHJpdmF0ZSBmaW5hbCBib29sZWFuIGlzRm91bmQ7Cglwcml2YXRlIGZpbmFsIGludCBmb3VuZEluZGV4OwoJUmVzdWx0T2ZJbmRleE9mKCkgewoJCXRoaXMoZmFsc2UsIDApOwoJfQoJUmVzdWx0T2ZJbmRleE9mKGludCBmb3VuZEluZGV4KSB7CgkJdGhpcyh0cnVlLCBmb3VuZEluZGV4KTsKCX0KCXByaXZhdGUgUmVzdWx0T2ZJbmRleE9mKGJvb2xlYW4gaXNGb3VuZCwgaW50IGZvdW5kSW5kZXgpIHsKCQl0aGlzLmlzRm91bmQgPSBpc0ZvdW5kOwoJCXRoaXMuZm91bmRJbmRleCA9IGZvdW5kSW5kZXg7Cgl9CglwdWJsaWMgYm9vbGVhbiBpc0ZvdW5kKCkgewoJCXJldHVybiBpc0ZvdW5kOwoJfQoJcHVibGljIGludCBmb3VuZEluZGV4KCkgewoJCWlmICghaXNGb3VuZCkKCQkJdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oImluZGV4IG5vdCBmb3VuZCIpOwoJCXJldHVybiBmb3VuZEluZGV4OwoJfQp9Cg==