import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

//DP : 주어진 문제를 여러 개의 부분 문제들로 나누어 푼 다음, 그 결과들로 주어진 문제를 푼다.


public class Main {


    public static void main(String[] args) throws NumberFormatException, IOException {

     BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

// BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

// StringTokenizer st = new StringTokenizer(br.readLine()," ");

// StringBuilder sb = new StringBuilder();

// int n = Integer.parseInt(br.readLine());

    

       

     int n = Integer.parseInt(br.readLine());

    

     int[] dp = new int[n+1];

    

     dp[1] = 1;

    

     if(n >= 2) {

     dp[2] = 2;

     }

    

     for(int i=3;i<=n;i++) {

     dp[i] = (dp[i-1] + dp[i-2]) 007;

     }

    

     System.out.println(dp[n]);

    

    }


}


보면 오버플로우 나서 미리 %연산 한거잖아 ?


근데 이렇게 하게되면 경우의 수가 이상하게 되는거아님 ?..


질문 게시판 보닌깐 미리 % 연산해도 결과는 같다고 하는데 이해가안됨..