import
java.util.ArrayList;
public
class
GFG {
static
class
contact {
String field1, field2, field3;
contact(String s1, String s2, String s3)
{
field1 = s1;
field2 = s2;
field3 = s3;
}
};
static
void
buildGraph(contact arr[],
int
n,
ArrayList<ArrayList<Integer> > mat)
{
for
(
int
i =
0
; i < n; i++)
for
(
int
j =
0
; j < n; j++)
mat.get(i).add(
0
);
for
(
int
i =
0
; i < n; i++) {
for
(
int
j = i +
1
; j < n; j++)
if
(arr[i].field1 == arr[j].field1
|| arr[i].field1 == arr[j].field2
|| arr[i].field1 == arr[j].field3
|| arr[i].field2 == arr[j].field1
|| arr[i].field2 == arr[j].field2
|| arr[i].field2 == arr[j].field3
|| arr[i].field3 == arr[j].field1
|| arr[i].field3 == arr[j].field2
|| arr[i].field3 == arr[j].field3) {
mat.get(i).set(j,
1
);
mat.get(j).set(i,
1
);
break
;
}
}
}
static
void
DFSvisit(
int
i,
ArrayList<ArrayList<Integer> > mat,
boolean
visited[],
ArrayList<Integer> sol,
int
n)
{
visited[i] =
true
;
sol.add(i);
for
(
int
j =
0
; j < n; j++)
if
(mat.get(i).get(j) !=
0
&& !visited[j])
DFSvisit(j, mat, visited, sol, n);
}
static
void
findSameContacts(contact arr[],
int
n)
{
ArrayList<Integer> sol =
new
ArrayList<>();
ArrayList<ArrayList<Integer> > mat
=
new
ArrayList<>();
for
(
int
i =
0
; i < n; i++)
mat.add(
new
ArrayList<>());
boolean
[] visited =
new
boolean
[n];
buildGraph(arr, n, mat);
for
(
int
i =
0
; i < n; i++) {
if
(!visited[i]) {
DFSvisit(i, mat, visited, sol, n);
sol.add(-
1
);
}
}
for
(
int
i =
0
; i < sol.size(); i++)
if
(sol.get(i) == -
1
)
System.out.println();
else
System.out.print(sol.get(i) +
" "
);
}
public
static
void
main(String[] args)
{
contact arr[] = {
new
contact(
"Gaurav"
,
"gaurav@gmail.com"
,
"gaurav@gfgQA.com"
),
new
contact(
"Lucky"
,
"lucky@gmail.com"
,
"+1234567"
),
new
contact(
"gaurav123"
,
"+5412312"
,
"gaurav123@skype.com"
),
new
contact(
"gaurav1993"
,
"+5412312"
,
"gaurav@gfgQA.com"
),
new
contact(
"raja"
,
"+2231210"
,
"raja@gfg.com"
),
new
contact(
"bahubali"
,
"+878312"
,
"raja"
)
};
int
n = arr.length;
findSameContacts(arr, n);
}
}