source_code: //package round136;
  import java.io.ByteArrayInputStream;
  import java.io.IOException;
  import java.io.InputStream;
  import java.io.PrintWriter;
  import java.util.Arrays;
  
  public class A2 {
  	InputStream is;
  	PrintWriter out;
  	String INPUT = "";
  	
  	void solve()
  	{
  		int n = ni();
  		int[] a = new int[n];
  		int[] b = new int[n];
  		for(int i = 0;i < n;i++)b[i] = a[i] = ni();
  		
  		b = radixSort(b);
  		int ct = 0;
  		for(int i = 0;i < n;i++){
  			if(a[i] != b[i])ct++;
  		}
  		if(ct <= 2){
  			out.println("YES");
  		}else{
  			out.println("NO");
  		}
  	}
  	
  	public static int[] radixSort(int[] f)
  	{
  		int[] to = new int[f.length];
  		{
  			int[] b = new int[65537];
  			for(int i = 0;i < f.length;i++)b[1+(f[i]&0xffff)]++;
  			for(int i = 1;i <= 65536;i++)b[i]+=b[i-1];
  			for(int i = 0;i < f.length;i++)to[b[f[i]&0xffff]++] = f[i];
  			int[] d = f; f = to;to = d;
  		}
  		{
  			int[] b = new int[65537];
  			for(int i = 0;i < f.length;i++)b[1+(f[i]>>>16)]++;
  			for(int i = 1;i <= 65536;i++)b[i]+=b[i-1];
  			for(int i = 0;i < f.length;i++)to[b[f[i]>>>16]++] = f[i];
  			int[] d = f; f = to;to = d;
  		}
  		return f;
  	}
  	
  	void run() throws Exception
  	{
  		is = oj ? System.in : new ByteArrayInputStream(INPUT.getBytes());
  		out = new PrintWriter(System.out);
  		
  		long s = System.currentTimeMillis();
  		solve();
  		out.flush();
  		tr(System.currentTimeMillis()-s+"ms");
  	}
  	
  	public static void main(String[] args) throws Exception
  	{
  		new A2().run();
  	}
  	
  	public int ni()
  	{
  		try {
  			int num = 0;
  			boolean minus = false;
  			while((num = is.read()) != -1 && !((num >= '0' && num <= '9') || num == '-'));
  			if(num == '-'){
  				num = 0;
  				minus = true;
  			}else{
  				num -= '0';
  			}
  			
  			while(true){
  				int b = is.read();
  				if(b >= '0' && b <= '9'){
  					num = num * 10 + (b - '0');
  				}else{
  					return minus ? -num : num;
  				}
  			}
  		} catch (IOException e) {
  		}
  		return -1;
  	}
  	
  	public long nl()
  	{
  		try {
  			long num = 0;
  			boolean minus = false;
  			while((num = is.read()) != -1 && !((num >= '0' && num <= '9') || num == '-'));
  			if(num == '-'){
  				num = 0;
  				minus = true;
  			}else{
  				num -= '0';
  			}
  			
  			while(true){
  				int b = is.read();
  				if(b >= '0' && b <= '9'){
  					num = num * 10 + (b - '0');
  				}else{
  					return minus ? -num : num;
  				}
  			}
  		} catch (IOException e) {
  		}
  		return -1;
  	}
  	
  	public String ns()
  	{
  		try{
  			int b = 0;
  			StringBuilder sb = new StringBuilder();
  			while((b = is.read()) != -1 && (b == '\r' || b == '\n' || b == ' '));
  			if(b == -1)return "";
  			sb.append((char)b);
  			while(true){
  				b = is.read();
  				if(b == -1)return sb.toString();
  				if(b == '\r' || b == '\n' || b == ' ')return sb.toString();
  				sb.append((char)b);
  			}
  		} catch (IOException e) {
  		}
  		return "";
  	}
  	
  	public char[] ns(int n)
  	{
  		char[] buf = new char[n];
  		try{
  			int b = 0, p = 0;
  			while((b = is.read()) != -1 && (b == ' ' || b == '\r' || b == '\n'));
  			if(b == -1)return null;
  			buf[p++] = (char)b;
  			while(p < n){
  				b = is.read();
  				if(b == -1 || b == ' ' || b == '\r' || b == '\n')break;
  				buf[p++] = (char)b;
  			}
  			return Arrays.copyOf(buf, p);
  		} catch (IOException e) {
  		}
  		return null;
  	}
  	
  	
  	double nd() { return Double.parseDouble(ns()); }
  	boolean oj = System.getProperty("ONLINE_JUDGE") != null;
  	void tr(Object... o) { if(!oj)System.out.println(Arrays.deepToString(o)); }
  }
  