// Account class
class Account {
    private String customerName;
    private int accountNumber;
    private double balance;
    private String accountType;

    public Account(String customerName, int accountNumber, double balance, String accountType) {
        this.customerName = customerName;
        this.accountNumber = accountNumber;
        this.balance = balance;
        this.accountType = accountType;
    }

    protected double getBalanceInternal() {
        return balance;
    }

    public void deposit(double amount) {
        balance += amount;
    }

    public void withdraw(double amount) {
        balance -= amount;
    }

    public double getBalance() {
        return balance;
    }

    public String getAccountType() {
        return accountType;
    }
}

// SavingsAccount class
class SavingsAccount extends Account {
    private double interestRate;

    public SavingsAccount(String customerName, int accountNumber, double balance, double interestRate) {
        super(customerName, accountNumber, balance, "Savings");
        this.interestRate = interestRate;
    }

    public void computeInterest() {
        double interest = getBalanceInternal() * interestRate / 100;
        deposit(interest);
    }

    public void withdraw(double amount) {
        if (amount > getBalanceInternal()) {
            System.out.println("Insufficient balance");
        } else {
            super.withdraw(amount);
        }
    }
}

// CurrentAccount class
class CurrentAccount extends Account {
    private double minimumBalance;
    private double serviceTax;

    public CurrentAccount(String customerName, int accountNumber, double balance, double minimumBalance, double serviceTax) {
        super(customerName, accountNumber, balance, "Current");
        this.minimumBalance = minimumBalance;
        this.serviceTax = serviceTax;
    }

    public void checkMinimumBalance() {
        if (getBalanceInternal() < minimumBalance) {
            withdraw(serviceTax);
            System.out.println("Service tax imposed");
        }
    }

    public void withdraw(double amount) {
        if (amount > getBalanceInternal()) {
            System.out.println("Insufficient balance");
        } else {
            super.withdraw(amount);
            checkMinimumBalance();
        }
    }
}

// Main function
public class AccountManagement {
    public static void main(String[] args) {
        SavingsAccount saurabhAccount = new SavingsAccount("Saurabh", 1234, 10000, 5);
        CurrentAccount akhilAccount = new CurrentAccount("Akhil", 5678, 5000, 1000, 500);

        System.out.println("Initial balances:");
        System.out.println("Saurabh's balance: " + saurabhAccount.getBalance());
        System.out.println("Akhil's balance: " + akhilAccount.getBalance());

        saurabhAccount.deposit(5000);
        System.out.println("Saurabh's balance after deposit: " + saurabhAccount.getBalance());
        saurabhAccount.computeInterest();
        System.out.println("Saurabh's balance after interest: " + saurabhAccount.getBalance());
        saurabhAccount.withdraw(2000);
        System.out.println("Saurabh's balance after withdrawal: " + saurabhAccount.getBalance());

        akhilAccount.deposit(2000);
        System.out.println("Akhil's balance after deposit: " + akhilAccount.getBalance());
        akhilAccount.withdraw(3000);
        System.out.println("Akhil's balance after withdrawal: " + akhilAccount.getBalance());
        akhilAccount.checkMinimumBalance();
        System.out.println("Akhil's balance after checking minimum balance: " + akhilAccount.getBalance());
    }
}