#include <bits/stdc++.h>   using namespace std;   namespace io {   void _(int &k) {     char c;     int e = 1;     k = 0;     while ((c = getchar()) >  9  || c <  0 )       if (c ==  - ) e = -1;     k = c -  0 ;     while ((c = getchar()) <=  9  && c >=  0 ) {       k *= 10;       k += c -  0 ;     }     k *= e;   }   void _(long long &k) {     char c;     int e = 1;     k = 0;     while ((c = getchar()) >  9  || c <  0 )       if (c ==  - ) e = -1;     k = c -  0 ;     while ((c = getchar()) <=  9  && c >=  0 ) {       k *= 10;       k += c -  0 ;     }     k *= e;   }   void _(char &c) {     while ((c = getchar()) ==     || c ==   n )       ;   }   void _(double &c) { scanf( %lf , &c); }   void _(char *s) {     char c;     while ((c = getchar()) != EOF && c !=     && c != 10) *s++ = c;   }   template <class t1, class t2>   void _(t1 &a, t2 &b) {     _(a);     _(b);   }   template <class t1, class t2, class t3>   void _(t1 &a, t2 &b, t3 &c) {     _(a);     _(b);     _(c);   }   template <class t1, class t2, class t3, class t4>   void _(t1 &a, t2 &b, t3 &c, t4 &d) {     _(a);     _(b);     _(c);     _(d);   }   template <class t1, class t2, class t3, class t4, class t5>   void _(t1 &a, t2 &b, t3 &c, t4 &d, t5 &e) {     _(a);     _(b);     _(c);     _(d);     _(e);   }   void _p(double k) { printf( %.6lf , k); }   void _p(char *c) {     for (; *c; putchar(*c++))       ;   }   void _p(const char *c) {     for (; *c; putchar(*c++))       ;   }   void _p(char c) { putchar(c); }   template <class T>   void _p0(T k) {     if (k >= 10) _p0(k / 10);     putchar(k % 10 +  0 );   }   template <class T>   void _p(T k) {     if (k < 0) {       putchar( - );       _p0(-k);     } else       _p0(k);   }   template <class T>   void __p(T k) {     _p(k);     putchar(   );   }   template <class T>   void _pn(T k) {     _p(k);     putchar(  n );   }   template <class t1, class t2>   void _p(t1 a, t2 b) {     __p(a);     _pn(b);   }   template <class t1, class t2, class t3>   void _p(t1 a, t2 b, t3 c) {     __p(a);     __p(b);     _pn(c);   }   template <class t1, class t2, class t3, class t4>   void _p(t1 a, t2 b, t3 c, t4 d) {     __p(a);     __p(b);     __p(c);     _pn(d);   }   template <class T>   void op(T *a, int n) {     int i;     n--;     for (i = 1; i <= n; i++) __p(a[i]);     _pn(a[n + 1]);   }   int gi() {     int first;     _(first);     return first;   }   long long gll() {     long long first;     _(first);     return first;   }   }  // namespace io   int gcd(int a, int b) { return b ? gcd(b, a % b) : a; }   void fcl() {     fclose(stdin);     fclose(stdout);   }   void fop(const char *s) {     char c[256], d[256];     memset(c, 0, sizeof(c));     memset(d, 0, sizeof(d));     strcpy(c, s);     strcpy(d, s);     freopen(strcat(c,  .in ),  r , stdin);     freopen(strcat(d,  .out ),  w , stdout);   }   int eq(double a, double b) {     return a + 0.00000000001 >= b && b + 0.00000000001 >= a;   }   template <class T>   void _ma(T &a, T b) {     if (a < b) a = b;   }   template <class T>   void _mi(T &a, T b) {     if (a > b) a = b;   }   const int N = 1234567, EE = 100000000, GG = 1000000000, ima = 2147483647;   using namespace io;   int n, m, a[N], an, T, l, r;   const int p = 1000000007;   long long f[N][3];   int main() {     int i, j;     long long a0, a1, a2;     _(n, l, r);     a0 = r / 3 - (l - 1) / 3;     a1 = (r + 2) / 3 - (l + 1) / 3;     a2 = (r + 1) / 3 - l / 3;     f[0][0] = 1;     for (i = 1; i <= n; i++) {       f[i][0] = (f[i - 1][0] * a0 + f[i - 1][1] * a2 + f[i - 1][2] * a1) % p;       f[i][1] = (f[i - 1][0] * a1 + f[i - 1][1] * a0 + f[i - 1][2] * a2) % p;       f[i][2] = (f[i - 1][0] * a2 + f[i - 1][1] * a1 + f[i - 1][2] * a0) % p;     }     _pn(f[n][0]);   }