package yukicoder; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintStream; import java.io.PrintWriter; import java.util.Arrays; import java.util.Iterator; public class Main{ public static void main(String[] args)throws Exception{ new Main().solve(); } final long mod=1_000_000_000+7; void solve(){ Scanner sc=new Scanner(System.in); int n=sc.nextInt(); Long k=sc.nextLong(); long ansS=0,ansF=0; int[][] a=new int[n+1][1]; for(int i=0;i=1){ if(n%2==1){ v=MtPrd(A,v,mod); n--; }else if(n%2==0){ n/=2; A=MtPrd(A,A,mod); } } return v; } int[][] MtPrd(int[][] A,int[][] B,long mod){ int[][] C=new int[A.length][B[0].length]; for(int i=0;i it; Scanner(InputStream in){ br=new BufferedReader(new InputStreamReader(in)); } String next()throws RuntimeException{ try{ if(it==null||!it.hasNext()) it=Arrays.asList(br.readLine().split(" ")).iterator(); return it.next(); }catch(IOException e){ throw new IllegalStateException(); } } int nextInt() throws RuntimeException{ return Integer.parseInt(next()); } long nextLong() throws RuntimeException{ return Long.parseLong(next()); } double nextDouble() throws RuntimeException{ return Double.parseDouble(next()); } void close(){ try{ br.close(); }catch(IOException e){ throw new IllegalStateException(); } } } private static class Printer extends PrintWriter{ Printer(PrintStream out){ super(out); } } }