뿌리와 가지
서로 다른 이름을 가진 N명의 사람이 있다.
이 사람들은 몇 개의 독립된 무리로 나뉘어 있으며, 각 무리는 한 명의 가장 위쪽 사람을 기준으로 한 나무 형태의 관계를 이룬다.
어떤 사람의 위쪽 사람에는 직접 연결된 사람뿐 아니라, 그 위쪽으로 계속 따라 올라가 만날 수 있는 모든 사람이 포함된다.
조사를 통해 여러 쌍의 정보가 주어졌는데, 각 정보는 한 사람이 다른 한 사람의 위쪽 사람 중 하나라는 뜻이다.
각 사람에 대해, 그 사람의 위쪽 사람은 한 명도 빠짐없이 모두 정보로 주어진다.
주어진 정보에는 모순이 없으며, 같은 정보가 중복되어 주어지지 않는다.
또한 각 무리는 하나의 뿌리를 가지는 트리 형태라고 알려져 있다.
이 정보를 이용하여 다음을 구해야 한다.
- 전체 무리의 개수
- 각 무리의 가장 위쪽 사람들의 이름
- 각 사람의 바로 아래에 있는 사람들의 목록
이름은 사전순 기준으로 정리하여 출력한다.
입력
첫번째 줄에 사람의 수 N이 주어진다.
두번째 줄에는 현재 사람들의 이름이 차례대로 주어진다.
모든 이름은 길이 1 이상 6 이하의 알파벳 소문자로 이루어져 있으며, 중복된 이름은 존재하지 않는다.
세번째 줄에는 기억된 정보의 개수 M이 주어진다.
이어지는 M개의 줄에는 X Y 꼴로 정보가 주어진다.
이는 Y가 X의 위쪽 사람 중 하나라는 의미이다.
같은 정보가 중복되어 주어지지 않으며, 입력에 모순이 있는 경우는 주어지지 않는다.
어떤 사람의 위쪽 사람에 해당하는 쌍은 하나도 누락되지 않고 전부 입력에 포함된다.
출력
첫번째 줄에는 무리의 개수 K를 출력한다.
두 번째 줄에는 각 무리의 가장 위쪽 사람들의 이름을 공백으로 구분하여 사전순으로 출력한다.
세번째 줄부터는 이름의 사전순대로 각 사람의 정보를 출력한다.
각 줄에는 사람의 이름, 바로 아래에 있는 사람의 수, 그리고 그 사람들의 이름을 사전순으로 공백으로 구분하여 출력한다.
제한
- 1 ≤ N ≤ 1,000
- 0 ≤ M ≤ N×(N-1)/2
예제 입력 1
7
daeil sangdo yuri hoseok minji doha haeun
7
hoseok sangdo
yuri minji
hoseok daeil
daeil sangdo
haeun doha
doha minji
haeun minji
예제 출력 1
2
minji sangdo
daeil 1 hoseok
doha 1 haeun
haeun 0
hoseok 0
minji 2 doha yuri
sangdo 1 daeil
yuri 0