diff --git a/src/convolution.rs b/src/convolution.rs
index 9576e3e..d084e3a 100644
--- a/src/convolution.rs
+++ b/src/convolution.rs
@@ -8,9 +8,9 @@ macro_rules! modulus {
                 const VALUE: u32 = $name as _;
                 const HINT_VALUE_IS_PRIME: bool = true;
 
-                fn butterfly_cache() -> &'static ::std::thread::LocalKey<::std::cell::RefCell<::std::option::Option<crate::modint::ButterflyCache<Self>>>> {
+                fn butterfly_cache() -> &'static ::std::thread::LocalKey<::std::cell::RefCell<::std::option::Option<self::modint::ButterflyCache<Self>>>> {
                     thread_local! {
-                        static BUTTERFLY_CACHE: ::std::cell::RefCell<::std::option::Option<crate::modint::ButterflyCache<$name>>> = ::std::default::Default::default();
+                        static BUTTERFLY_CACHE: ::std::cell::RefCell<::std::option::Option<self::modint::ButterflyCache<$name>>> = ::std::default::Default::default();
                     }
                     &BUTTERFLY_CACHE
                 }
@@ -19,9 +19,9 @@ macro_rules! modulus {
     };
 }
 
-use crate::{
+use super::{
     internal_bit, internal_math,
-    modint::{ButterflyCache, Modulus, RemEuclidU32, StaticModInt},
+    modint::{self, ButterflyCache, Modulus, RemEuclidU32, StaticModInt},
 };
 use std::{
     cmp,
@@ -232,10 +232,7 @@ fn prepare<M: Modulus>() -> ButterflyCache<M> {
 
 #[cfg(test)]
 mod tests {
-    use crate::{
-        modint::{Mod998244353, Modulus, StaticModInt},
-        RemEuclidU32,
-    };
+    use super::super::modint::{self, Mod998244353, Modulus, RemEuclidU32, StaticModInt};
     use rand::{rngs::ThreadRng, Rng as _};
     use std::{
         convert::{TryFrom, TryInto as _},
diff --git a/src/internal_math.rs b/src/internal_math.rs
index 515191c..ce1aaa8 100644
--- a/src/internal_math.rs
+++ b/src/internal_math.rs
@@ -239,7 +239,7 @@ pub(crate) fn primitive_root(m: i32) -> i32 {
 mod tests {
     #![allow(clippy::unreadable_literal)]
     #![allow(clippy::cognitive_complexity)]
-    use crate::internal_math::{inv_gcd, is_prime, pow_mod, primitive_root, safe_mod, Barrett};
+    use super::{inv_gcd, is_prime, pow_mod, primitive_root, safe_mod, Barrett};
     use std::collections::HashSet;
 
     #[test]
diff --git a/src/internal_queue.rs b/src/internal_queue.rs
index 5e51e9a..5266591 100644
--- a/src/internal_queue.rs
+++ b/src/internal_queue.rs
@@ -51,7 +51,7 @@ impl<T> SimpleQueue<T> {
 
 #[cfg(test)]
 mod test {
-    use crate::internal_queue::SimpleQueue;
+    use super::SimpleQueue;
 
     #[allow(clippy::cognitive_complexity)]
     #[test]
diff --git a/src/lazysegtree.rs b/src/lazysegtree.rs
index 47020a8..959fabf 100644
--- a/src/lazysegtree.rs
+++ b/src/lazysegtree.rs
@@ -1,5 +1,5 @@
-use crate::internal_bit::ceil_pow2;
-use crate::Monoid;
+use super::internal_bit::ceil_pow2;
+use super::segtree::Monoid;
 
 pub trait MapMonoid {
     type M: Monoid;
@@ -314,7 +314,8 @@ where
 
 #[cfg(test)]
 mod tests {
-    use crate::{LazySegtree, MapMonoid, Max};
+    use super::super::segtree::Max;
+    use super::{LazySegtree, MapMonoid};
 
     struct MaxAdd;
     impl MapMonoid for MaxAdd {
diff --git a/src/math.rs b/src/math.rs
index 61f15d5..f29a819 100644
--- a/src/math.rs
+++ b/src/math.rs
@@ -1,6 +1,6 @@
 //! Number-theoretic algorithms.
 
-use crate::internal_math;
+use super::internal_math;
 
 use std::mem::swap;
 
diff --git a/src/maxflow.rs b/src/maxflow.rs
index 507cd6e..816001d 100644
--- a/src/maxflow.rs
+++ b/src/maxflow.rs
@@ -1,6 +1,6 @@
 #![allow(dead_code)]
-use crate::internal_queue::SimpleQueue;
-use crate::internal_type_traits::Integral;
+use super::internal_queue::SimpleQueue;
+use super::internal_type_traits::Integral;
 use std::cmp::min;
 use std::iter;
 
@@ -224,7 +224,7 @@ struct _Edge<Cap> {
 
 #[cfg(test)]
 mod test {
-    use crate::{Edge, MfGraph};
+    use super::{Edge, MfGraph};
 
     #[test]
     fn test_max_flow_wikipedia() {
diff --git a/src/mincostflow.rs b/src/mincostflow.rs
index 7d708e4..93184ce 100644
--- a/src/mincostflow.rs
+++ b/src/mincostflow.rs
@@ -1,4 +1,4 @@
-use crate::internal_type_traits::Integral;
+use super::internal_type_traits::Integral;
 
 pub struct MinCostFlowEdge<T> {
     pub from: usize,
diff --git a/src/modint.rs b/src/modint.rs
index 8aa5220..1347c21 100644
--- a/src/modint.rs
+++ b/src/modint.rs
@@ -48,7 +48,7 @@
 //! [`ModInt998244353`]: ./type.ModInt998244353.html
 //! [`ModInt`]: ./type.ModInt.html
 
-use crate::internal_math;
+use super::internal_math;
 use std::{
     cell::RefCell,
     convert::{Infallible, TryInto as _},
@@ -1050,7 +1050,7 @@ impl_folding! {
 
 #[cfg(test)]
 mod tests {
-    use crate::modint::ModInt1000000007;
+    use super::ModInt1000000007;
 
     #[test]
     fn static_modint_new() {
diff --git a/src/scc.rs b/src/scc.rs
index 2eff835..d33c15b 100644
--- a/src/scc.rs
+++ b/src/scc.rs
@@ -1,4 +1,4 @@
-use crate::internal_scc;
+use super::internal_scc;
 
 pub struct SccGraph {
     internal: internal_scc::SccGraph,
diff --git a/src/segtree.rs b/src/segtree.rs
index b543aa3..9d6b820 100644
--- a/src/segtree.rs
+++ b/src/segtree.rs
@@ -1,5 +1,5 @@
-use crate::internal_bit::ceil_pow2;
-use crate::internal_type_traits::{BoundedAbove, BoundedBelow, One, Zero};
+use super::internal_bit::ceil_pow2;
+use super::internal_type_traits::{BoundedAbove, BoundedBelow, One, Zero};
 use std::cmp::{max, min};
 use std::convert::Infallible;
 use std::marker::PhantomData;
@@ -238,8 +238,8 @@ where
 
 #[cfg(test)]
 mod tests {
-    use crate::segtree::Max;
-    use crate::Segtree;
+    use super::super::Segtree;
+    use super::Max;
 
     #[test]
     fn test_max_segtree() {
diff --git a/src/twosat.rs b/src/twosat.rs
index ac5f8b6..213d486 100644
--- a/src/twosat.rs
+++ b/src/twosat.rs
@@ -1,4 +1,4 @@
-use crate::internal_scc;
+use super::internal_scc;
 
 pub struct TwoSat {
     n: usize,