import
java.io.*;
import
java.util.*;
class
TrieNode {
TrieNode[] child =
new
TrieNode[
256
];
TrieNode() {}
}
class
GFG {
private
static
void
insertTrie(TrieNode root,
String str)
{
int
M = str.length();
for
(
int
i =
0
; i < M; i++) {
if
(root.child[str.charAt(i)] ==
null
) {
root.child[str.charAt(i)] =
new
TrieNode();
}
root = root.child[str.charAt(i)];
}
}
private
static
int
findStrLen(TrieNode root, String str)
{
int
M = str.length();
int
len =
0
;
for
(
int
i =
0
; i < M; i++) {
if
(root.child[str.charAt(i)] !=
null
) {
len++;
root = root.child[str.charAt(i)];
}
else
{
return
len;
}
}
return
len;
}
private
static
void
findMaxLenPair(List<String> arr,
int
N)
{
int
idx = -
1
;
int
len =
0
;
TrieNode root =
new
TrieNode();
insertTrie(root, arr.get(
0
));
for
(
int
i =
1
; i < N; i++) {
int
temp = findStrLen(root, arr.get(i));
if
(temp > len) {
len = temp;
idx = i;
}
insertTrie(root, arr.get(i));
}
for
(
int
i =
0
; i < N; i++) {
int
M = arr.get(i).length();
if
(i != idx && M >= len) {
boolean
found =
true
;
for
(
int
j =
0
; j < len; j++) {
if
(arr.get(i).charAt(j)
!= arr.get(idx).charAt(j)) {
found =
false
;
break
;
}
}
if
(found) {
System.out.println(
"("
+ arr.get(i)
+
", "
+ arr.get(idx)
+
")"
);
return
;
}
}
}
}
public
static
void
main(String[] args)
{
List<String> arr = Arrays.asList(
new
String[] {
"geeksforgeeks"
,
"geeks"
,
"geeksforcse"
});
int
N = arr.size();
findMaxLenPair(arr, N);
}
}