/* package whatever; // don't place package name! */ 
 
import  java.util.* ; 
import  java.lang.* ; 
import  java.io.* ; 
import  java.util.regex.* ; 
/* Name of the class has to be "Main" only if the class is public. */ 
class  Ideone
{ 
	{ 
		//String[] URLs = new String[] { "http://f...content-available-to-author-only...o.com/blah_blah", "http://f...content-available-to-author-only...o.com/blah_blah/", "http://f...content-available-to-author-only...o.com/blah_blah_(wikipedia)", "http://f...content-available-to-author-only...o.bar?q=Spaces should be encoded" }; 
		//String[] URLs = new String[] { "[20:56] <@Котофеич> http://s...content-available-to-author-only...l.com/pics/pics_original/3/4/2/5825243.jpg" };  
		// The URL above is invalid since it contains consecutive dots 
		String [ ]  URLs 
=  new  String [ ]  {  "[20:56] <@Котофеич> http://s...content-available-to-author-only...l.com/pics/pics_original/3/4/2/5825243.jpg"  } ;  		Pattern REGEX =  Pattern.compile ( "(?i)\\ b(?:(?:https?|ftp)://)(?:\\ S+(?::\\ S*)?@)?(?:(?!(?:10|127)(?:\\ .\\ d{1,3}){3})(?!(?:169\\ .254|192\\ .168)(?:\\ .\\ d{1,3}){2})(?!172\\ .(?:1[6-9]|2\\ d|3[0-1])(?:\\ .\\ d{1,3}){2})(?:[1-9]\\ d?|1\\ d\\ d|2[01]\\ d|22[0-3])(?:\\ .(?:1?\\ d{1,2}|2[0-4]\\ d|25[0-5])){2}(?:\\ .(?:[1-9]\\ d?|1\\ d\\ d|2[0-4]\\ d|25[0-4]))|(?:(?:[a-z\\ u00a1-\\ uffff0-9]-*)*[a-z\\ u00a1-\\ uffff0-9]+)(?:\\ .(?:[a-z\\ u00a1-\\ uffff0-9]-*)*[a-z\\ u00a1-\\ uffff0-9]+)*(?:\\ .(?:[a-z\\ u00a1-\\ uffff]{2,}))\\ .?)(?::\\ d{2,5})?(?:[/?#]\\ S*)?\\ b" ) ; 
            Matcher matcher =  REGEX.matcher ( url) ; 
            if  ( matcher.find ( ) )  { 
                System .
out .
println ( matcher.
group ( ) ) ;                } 
 
        } 
 
    } 
} 
 
				LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CmltcG9ydCBqYXZhLnV0aWwucmVnZXguKjsKLyogTmFtZSBvZiB0aGUgY2xhc3MgaGFzIHRvIGJlICJNYWluIiBvbmx5IGlmIHRoZSBjbGFzcyBpcyBwdWJsaWMuICovCmNsYXNzIElkZW9uZQp7CglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb24KCXsKCQkvL1N0cmluZ1tdIFVSTHMgPSBuZXcgU3RyaW5nW10geyAiaHR0cDovL2YuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLm8uY29tL2JsYWhfYmxhaCIsICJodHRwOi8vZi4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4uby5jb20vYmxhaF9ibGFoLyIsICJodHRwOi8vZi4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4uby5jb20vYmxhaF9ibGFoXyh3aWtpcGVkaWEpIiwgImh0dHA6Ly9mLi4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5vLmJhcj9xPVNwYWNlcyBzaG91bGQgYmUgZW5jb2RlZCIgfTsKCQkvL1N0cmluZ1tdIFVSTHMgPSBuZXcgU3RyaW5nW10geyAiWzIwOjU2XSA8QNCa0L7RgtC+0YTQtdC40Yc+IGh0dHA6Ly9zLi4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5sLmNvbS9waWNzL3BpY3Nfb3JpZ2luYWwvMy80LzIvNTgyNTI0My5qcGciIH07IAoJCS8vIFRoZSBVUkwgYWJvdmUgaXMgaW52YWxpZCBzaW5jZSBpdCBjb250YWlucyBjb25zZWN1dGl2ZSBkb3RzCgkJU3RyaW5nW10gVVJMcyA9IG5ldyBTdHJpbmdbXSB7ICJbMjA6NTZdIDxA0JrQvtGC0L7RhNC10LjRhz4gaHR0cDovL3MuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLmwuY29tL3BpY3MvcGljc19vcmlnaW5hbC8zLzQvMi81ODI1MjQzLmpwZyIgfTsKCQlQYXR0ZXJuIFJFR0VYID0gUGF0dGVybi5jb21waWxlKCIoP2kpXFxiKD86KD86aHR0cHM/fGZ0cCk6Ly8pKD86XFxTKyg/OjpcXFMqKT9AKT8oPzooPyEoPzoxMHwxMjcpKD86XFwuXFxkezEsM30pezN9KSg/ISg/OjE2OVxcLjI1NHwxOTJcXC4xNjgpKD86XFwuXFxkezEsM30pezJ9KSg/ITE3MlxcLig/OjFbNi05XXwyXFxkfDNbMC0xXSkoPzpcXC5cXGR7MSwzfSl7Mn0pKD86WzEtOV1cXGQ/fDFcXGRcXGR8MlswMV1cXGR8MjJbMC0zXSkoPzpcXC4oPzoxP1xcZHsxLDJ9fDJbMC00XVxcZHwyNVswLTVdKSl7Mn0oPzpcXC4oPzpbMS05XVxcZD98MVxcZFxcZHwyWzAtNF1cXGR8MjVbMC00XSkpfCg/Oig/OlthLXpcXHUwMGExLVxcdWZmZmYwLTldLSopKlthLXpcXHUwMGExLVxcdWZmZmYwLTldKykoPzpcXC4oPzpbYS16XFx1MDBhMS1cXHVmZmZmMC05XS0qKSpbYS16XFx1MDBhMS1cXHVmZmZmMC05XSspKig/OlxcLig/OlthLXpcXHUwMGExLVxcdWZmZmZdezIsfSkpXFwuPykoPzo6XFxkezIsNX0pPyg/OlsvPyNdXFxTKik/XFxiIik7CgkJZm9yIChTdHJpbmcgdXJsIDogVVJMcykgewogICAgICAgICAgICBNYXRjaGVyIG1hdGNoZXIgPSBSRUdFWC5tYXRjaGVyKHVybCk7CiAgICAgICAgICAgIGlmIChtYXRjaGVyLmZpbmQoKSkgewogICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKG1hdGNoZXIuZ3JvdXAoKSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICB9CiAgICAgICAgICAgIAogICAgfQp9