import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
//BufferedReader를 이용해 입력을 받아줍니다.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//우선적으로 테스트케이스 개수를 받아줍니다.
int tc = Integer.parseInt(br.readLine());
//문제의 핵심입니다. 소수점을 기준으로 각각 좌우 모두가 오름차순으로 정렬이 되어야 하기 때문에,
//우선순위 큐를 이용하여 두 가지 정렬조건을 적용해주었습니다.
PriorityQueue<int[]> pq = new PriorityQueue<>(new Comparator<int[]>(){
@Override
public int compare(int[] a, int[] b){
if(a[0]==b[0]){
return a[1]-b[1];
} else {
return a[0]-b[0];
}
}
});
//이제 실제 데이터를 한 줄씩 받아옵니다.
for(int i=0; i<tc; i++){
//받아온 수를 소수점을 기준으로 잘라줍니다.
String[] now = br.readLine().split("\\.");
//그리고 정수, 소수점 부분을 각각 받아줄 front, back을 미리 선언해줍니다.
int front, back;
//소수점이 존재하지 않을 경우는 now.length == 1을 통해서 판단할 수 있습니다.
if(now.length == 1){
front = Integer.parseInt(now[0]); //정수 부분은 존재하는 수를 그대로 넣어주고,
back = -1; //해당 정수중 가장 앞에 위치해야 하므로 -1을 입력하여 정렬에 사용합니다.
//소수점이 존재하는 경우입니다.
} else {
front = Integer.parseInt(now[0]); //정수 부분을 입력해주고,
back = Integer.parseInt(now[1]); //소수 부분을 입력해줍니다.
}
//이렇게 만들어진 front, back을 담은 int[]배열을 pq에 넣어 정렬이 되도록 합니다.
pq.add(new int[]{front, back});
}
//출력하는 값은 StringBuilder에 넣어 출력하기 위해 StringBuilder를 만들어줍니다.
StringBuilder sb = new StringBuilder();
//이제 정렬이 완료된 pq에서 하나씩 값을 꺼내어주며 sb를 채워줍니다.
while(!pq.isEmpty()){
//이번에 꺼낸 수 now 입니다.
int[] now = pq.poll();
//만약 소수점의 수가 -1이라면,
if(now[1] == -1){
//소수점은 없다는 표시이므로 정수만 입력하여 추가해줍니다.
sb.append(now[0]+"\n");
//소수점의 수가 0이상 이라면,
} else {
//정수와 ".", 그리고 소수자리 수를 연결시켜 추가해줍니다.
sb.append(now[0]+"."+now[1]+"\n");
}
}
//이렇게 만들어진 sb를 답안으로 제출합니다.
System.out.println(sb.toString().trim());
}
}