import java.util.*;

public class Main {

    public static void main(String[] args) {
        //创建一个LikeRecorder对象
        LikeRecorder recorder = new LikeRecorderImpl();
//创建一个键盘输入对象
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            String name = scanner.next();
            recorder.like(name);
        }

        System.out.println(Arrays.toString(recorder.getLikeUsers()));
    }

}

/**
 * 点赞记录器
 */
interface LikeRecorder {

    /**
     * 若用户没有点赞过,则记录此次点赞行为。
     * 若用户曾经点赞过,则删除用户点赞记录。
     *
     * @param username 用户名
     */
    void like(String username);

    /**
     * 返回所有点赞的用户名
     *
     * @return 用户名数组
     */
    String[] getLikeUsers();

}

class LikeRecorderImpl implements LikeRecorder {

    // write your code here......
    private Set<String> list;//使用Set来存储点赞的用户名,保证不重复
    public LikeRecorderImpl(){
        list =new HashSet<>();
    }
    @Override
    public void like(String username){
                /**
     * 若用户没有点赞过,则记录此次点赞行为。
     * 若用户曾经点赞过,则删除用户点赞记录。
     */
     if(list.contains(username)){
        // 若用户曾经点赞过,则删除用户点赞记录。
        list.remove(username);

     }
     else{
        // 若用户没有点赞过,则记录此次点赞行为。
        list.add(username);
     }
    }
    @Override
    public String[] getLikeUsers(){
        
// 返回所有点赞的用户名
 return list.toArray(new String[0]);//这里是如果列表的长度大于new string[0]创建的数组长度,那么他会返回列表长度的数组拷贝数据到该数组中去,反之new出来的数字的长度要大于列表的长度,那么他的长度就是数组长度的数组
    }

}