import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); //선언
StringTokenizer stringTokenizer = new StringTokenizer(br.readLine());
int N = Integer.parseInt(stringTokenizer.nextToken());
int M = Integer.parseInt(stringTokenizer.nextToken());
//초기화
ArrayList<Integer>[] A = new ArrayList[N + 1];
int[] arr = new int[N + 1];
for (int i = 0; i <= N; i++) {
A[i] = new ArrayList();
}
for (int i = 0; i < M; i++) {
stringTokenizer = new StringTokenizer(br.readLine());
int S = Integer.parseInt(stringTokenizer.nextToken());
int E = Integer.parseInt(stringTokenizer.nextToken());
A[S].add(E);
arr[E]++;
}
//위상 정렬 수행
Queue<Integer> queue = new LinkedList<>();
String answer = "";
for (int i = 1; i <= N; i++) {
if (arr[i] == 0) queue.add(i);
}
while (!queue.isEmpty()) {
Integer now = queue.poll();
answer += String.valueOf(now) + " ";
for (int a : A[now]) {
arr[a]--;
if (arr[a] == 0) queue.add(a);
}
}
System.out.println(answer);
}
}
class Solution {
public int solution(int[] number) {
int answer = 0;
for(int i=0; i<number.length; i++){
for(int j=i+1; j<number.length; j++){
for(int k=j+1; k<number.length; k++){
if(number[i]+number[j]+number[k]==0) answer++;
}
}
}
return answer;
}
}
class Solution {
public int solution(int[][] sizes) {
//큰 수를 첫 번째 값으로 바꾸기.
for(int i=0; i<sizes.length; i++){
if(sizes[i][0] < sizes[i][1]){
int temp = sizes[i][0];
sizes[i][0] = sizes[i][1];
sizes[i][1] = temp;
}
}
//각각 최대값 찾아서 곱하기
int max1 = sizes[0][0];
int max2 = sizes[0][1];
for(int i=1; i<sizes.length; i++){
if(max1 < sizes[i][0]) max1 = sizes[i][0];
if(max2 < sizes[i][1]) max2 = sizes[i][1];
}
return max1*max2;
}
}
import java.util.*;
class Solution {
public int solution(int[] people, int limit) {
int answer = 0;
//사람 정렬하기
Arrays.sort(people);
//작은 사람과 큰 사람 합하기, 포인터 이용
int left = 0;
int right = people.length-1;
while(left <= right){
//left==right
if(left==right) {
answer++;
break;
}
//리밋 이하
if(people[left]+people[right] <= limit){
answer++;
left++;
right--;
}
//리밋 초과
if(people[left]+people[right] > limit){
answer++;
right--;
}
}
return answer;
}
}
요즘 공부에 소홀했는데, 다시 시작!