
1, 2, 3 ์ธ ๊ฐ์ง ์ซ์๋ฅผ ์ฌ์ฉํด์ ๋ํ ์ ์๋ ๋ฐฉ๋ฒ์ ๊ฐ์์ ๋ํด ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค. n์ ์ต๋ ๊ฐ์ ๋ฐฑ๋ง์ผ๋ก ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ dfs๋ก ๊ตฌํ๋ค๋ ๊ฑด ๋ถ๊ฐ๋ฅํ๋ค. ์ด๋ฏธ ๊ตฌํด์ง ๊ฐ์ผ๋ก๋ถํฐ ๋์ ํด์ ๊ตฌํด๋๊ฐ๋ ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ๋ฒ์ผ๋ก ์ ๊ทผํ๋ค.
์ฐ์ 1์ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ 1 ๋ฑ ํ ๊ฐ์ง๋ค.
ํ์ง๋ง 2๋ฅผ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ 2 ํ ๊ฐ์ง์, 1์๋ค๊ฐ 1์ ๋ ํ๋ ๋ฐฉ๋ฒ ์ด 2๊ฐ์ง์ด๋ค.
3์ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ ๋ง์ฐฌ๊ฐ์ง๋ก 3 ํ ๊ฐ์ง์, 2์๋ค๊ฐ 1์ ๋ํ๋ ๋ฐฉ๋ฒ์ด ์์ ๊ฒ์ด๋ค. ๊ทธ๋ฐ๋ฐ ์๋ 1, 2, 3 ์ธ ๊ฐ์ง๋ฅผ ์ฌ์ฉํ ์ ์๋ค๊ณ ํ์ผ๋ฏ๋ก ์ด๋ฒ์๋ 1 ์๋ค๊ฐ 2๋ฅผ ๋ํ๋ ๋ฐฉ๋ฒ๋ ์์ ๊ฒ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ์ ์ถ๊ฐ์ ์ผ๋ก 1+1์ 1์ ๋ํ๋ ๋ฐฉ๋ฒ๋ ์๋ค.
1+1์ด ์ด๋์์ ๋์๋ ํ๋ฉด 2๋ฅผ ๊ตฌํ๋ ๋ฐฉ๋ฒ์์ ๋์จ ๊ฒ์ด๋ค. ์ฆ 3์ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ ๋ค์ ์ธ ๊ฐ์ง๋ก ๋ถ๋ฅํ ์ ์๋ค.
3์ ๊ตฌํ๋ ๋ฐฉ๋ฒ (3๊ทธ ์์ฒด)1์ ๊ตฌํ๋ ๋ฐฉ๋ฒ (1์๋ค๊ฐ 2๋ฅผ ๋ํ๋ฉด ๋๋ฏ๋ก)2์ ๊ตฌํ๋ ๋ฐฉ๋ฒ (2์๋ค๊ฐ 1์ ๋ํ๋ฉด ๋๋ฏ๋ก)

๊ทธ๋ฆผ์ผ๋ก ๋ํ๋ด๋ฉด ํ๋์ ํ๊ดํ์ผ๋ก ์น ํ ๋ถ๋ถ์ด 2๋ฅผ ๊ตฌํ๋ ๋ฐฉ๋ฒ๋ค์ด๋ค. 3์ ๊ฒฝ์ฐ 2์์ 1์ ๋ํ๋ฉด ๋๊ณ , 4๋ 2์๋ค๊ฐ 2๋ฅผ ๋ํ๋ค๋ ์ฐจ์ด๋ง ์์ ๋ฟ์ด๋ค.

์ด๊ฑด 3์ ๊ตฌํ๋ ๋ฐฉ๋ฒ์๋ ์ ์ฉ๋ ์ ์๋ค. 4๋ 3์๋ค๊ฐ 1๋ง ๋ํ๋ฉด ๋๋ค. ๊ฒฐ๊ตญ 4๋ฅผ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ์ด 3๊ฐ์ง๋ค
3์ ๊ตฌํ๋ ๋ฐฉ๋ฒ (3์๋ค๊ฐ 1์ ๋ํ๋ฉด ๋๋ฏ๋ก)1์ ๊ตฌํ๋ ๋ฐฉ๋ฒ (1์๋ค๊ฐ 3๋ฅผ ๋ํ๋ฉด ๋๋ฏ๋ก)2์ ๊ตฌํ๋ ๋ฐฉ๋ฒ (2์๋ค๊ฐ 2์ ๋ํ๋ฉด ๋๋ฏ๋ก)

ํ์ฌ ์๊ฐ n์ผ ๋ n-1, n-2, n-3์๋ฅผ 1,2,3 ์ผ๋ก ๋ง๋๋ ๋ฐฉ๋ฒ์ ์๋ฅผ ๋ชจ๋ ๋ํ๋ฉด ๋๋ ๊ฒ์ด๋ค.
dp[i] = dp[i-1] + dp[i-2] + dp[i-3] (i >= 4)
n์ ์ต๋๊ฐ์ด ๋ฐฑ๋ง์ด๊ธฐ ๋๋ฌธ์ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ ๊ฒฝ์ฐ 10์ต์ ๋์ด๊ฐ๊ฒ ๋๋ค. ํ ๋ฒ ๊ฐ์ ๊ตฌํ ๋๋ง๋ค ์ ์๋ ์๋ก ๋๋ ์ฃผ์ง ์์ผ๋ฉด ์ฌ์ฉํ๋ ์๋ฃํ์ ์ต๋๊ฐ์ ๋์ด์ ์๋ชป๋ ๊ฐ์ด ๊ตฌํด์ง ๊ฐ๋ฅ์ฑ์ด ์๋ค.(์ค๋ฒํ๋ก์ฐ)
์๋ฐ์์๋ ์ค๋ฒํ๋ก์ฐ๋๋ฉด์ ์๋ชป๋ ๊ฐ์ด ๋์ถ๋์ด ํ๋ ธ์ต๋๋ค๊ฐ ๋จ์ง๋ง ํ์ด์ฌ์ ๊ฒฝ์ฐ๋ ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ๋ก ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฐ ํ ์คํธ ์ผ์ด์ค๋ง๋ค ๋งค๋ฒ n์ ๋ํ ๊ฐ์ ๊ตฌํ๋ ค๊ณ ํ๋ฉด ์ด๋ฒ์๋ ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ์ํ๋ค. ํ์ด ์์ฒด๊ฐ ๋์ ์ ํตํด ๊ตฌํ๋ ๊ฒ์ด๋ฏ๋ก ๋ง์ฝ ์ฒซ ๋ฒ์งธ ๊ฐ์ด 100๋ง์ด์๋ค๋ฉด ๊ทธ ๋ค์ ๊ตฌํ๊ฒ ๋ ๊ฐ๋ค์ ์ฒซ ๋ฒ์งธ ๊ฐ์ ๊ตฌํ ๋ ์ด๋ฏธ ๋ค ๊ตฌํด์ง ๊ฐ๋ค์ผ ๊ฒ์ด๋ค. ๊ทธ๋ฅ ์ฒ์๋ถํฐ ๋ฐฑ๋ง์ง๋ฆฌ ๋ฐฐ์ด์ ๋ง๋ค์ด๋๊ณ ๋ชจ๋ ๊ฒฝ์ฐ์ ์์ ๋ํด ๊ตฌํ ํ ๊ฐ ํ ์ผ์์ ์ฃผ์ด์ง๋ n์ ๋ํด ํด๋นํ๋ ๊ฐ์ ์ถ๋ ฅํ๋ ๋ฐฉ์์ผ๋ก ํ์ดํ๋ฉด ํด๊ฒฐํ ์ ์๋ค.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Main {
public final static int DP_LENGTH = 1_000_001;
public final static int DIVIDE_NUMBER = 1_000_000_009;
public static long[] dp = new long[DP_LENGTH+3];
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
memo();
while (T > 0) {
int n = Integer.parseInt(br.readLine());
System.out.println(dp[n] % DIVIDE_NUMBER);
T--;
}
}
public static void memo() {
dp[1] = 1;
dp[2] = 2;
dp[3] = 4;
for (int i = 4; i < DP_LENGTH; i++) {
dp[i] = (dp[i-1] + dp[i-2] + dp[i-3]) % DIVIDE_NUMBER;
}
}
}